我有一个XML文件,其中包含符号' & lt(<)':
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent>
<child><100</child>
</parent>
我使用以下方法读取此值:
public String getValue(String parentTag, int parentIndex)
{
Node root = m_doc.getElementsByTagName(parentTag).item(parentIndex);
return root.getTextContent();
}
并使用 HTML 在 JLabel 中显示:
JLabel label = new JLabel("<html><b>"+docXml.getValue("negative", 0) +"</b></html>");
但是这个值显示为而符号&lt; 。如果您不使用HTML,则会显示它。如何使此符号以HTML格式显示?谢谢!
附:符号&amp; gt(&gt;)正确显示!
答案 0 :(得分:2)
Node.getTextContent()
已经返回未转义的文字。因此,当您尝试从<child>
获取文字时,您获得的内容为<100
。
JLabel假设&lt;是html元素的无效开始标记的一部分,并将其删除。
使用>
时,您可以看到正确的文字,因为>
可以接受JLabel
。
要解决此问题,在向JLabel
添加文本之前,您可以退回从XML文档中获取的内容。
e.g。使用StringEscapeUtils.escapeXml(请注意,这只会转义<
>
&
'
"
个字符。否则,请查看escapeHtml)
JLabel label = new JLabel("<html><b>"+StringEscapeUtils.escapeXml(docXml.getValue("negative", 0)) +"</b></html>");
不幸的是,Node.getTextContent()文档中缺少此信息,因此如果您的XML包含转义文本,则必须始终小心谨慎,并且不要依赖返回的文本。