如何在Dot文件中转义<、>等字符以正常渲染Graphviz图形?
问题描述
我生成了如下Graphviz图形代码,但该图形无法正常渲染,原因是节点2的for循环条件中的<字符。请问如何转义<、>及其他类似特殊字符?
strict digraph { 0 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">int l0;<BR ALIGN="LEFT"/>l0 = 0;<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 2 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">range loop(l0 = 0;l0 < 1000000;l0++)<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 3 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">m[(l0*4)+1024] = 2236;<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 4 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">proc_exit(0);<BR ALIGN="LEFT"/><BR ALIGN="LEFT"/></TD></TR></TABLE>>] 0 -> 2 2 -> 3 2 -> 3 2 -> 4 3 -> 2 }
解决方法
你使用的是Graphviz的HTML-like标签(即label=<<TABLE>...</TABLE>>格式),这类标签遵循HTML的字符转义规则,特殊字符必须替换为对应的HTML实体才能正常解析:
<转义为<>转义为>"转义为"&转义为&
修正后的代码如下(重点修改了节点2中的<为<):
strict digraph { 0 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">int l0;<BR ALIGN="LEFT"/>l0 = 0;<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 2 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">range loop(l0 = 0;l0 < 1000000;l0++)<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 3 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">m[(l0*4)+1024] = 2236;<BR ALIGN="LEFT"/></TD></TR></TABLE>>] 4 [shape=none;label=<<TABLE BORDER="1" CELLBORDER="1" CELLSPACING="0"><TR><TD BORDER="0" ALIGN="LEFT" COLSPAN="2">proc_exit(0);<BR ALIGN="LEFT"/><BR ALIGN="LEFT"/></TD></TR></TABLE>>] 0 -> 2 2 -> 3 2 -> 3 2 -> 4 3 -> 2 }
如果使用普通字符串标签(label="..."格式),则需要用反斜杠\转义特殊字符,例如:
2 [label="range loop(l0 = 0;l0 \< 1000000;l0++)"]
但HTML-like标签更适合多行文本和格式化布局,推荐优先使用HTML实体转义的方式。
内容的提问来源于stack exchange,提问作者Ali Qanbari
相关产品推荐
相关产品推荐

