不要读“'<'使用JLabel中的XML文件

时间:2015-03-14 16:08:02

标签: java html xml swing jlabel

我有一个XML文件,其中包含符号' & lt(<)':

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent>
    <child>&lt;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;)正确显示!

1 个答案:

答案 0 :(得分:2)

Node.getTextContent()已经返回未转义的文字。因此,当您尝试从<child>获取文字时,您获得的内容为<100

JLabel假设&lt;是html元素的无效开始标记的一部分,并将其删除。

使用&gt时,您可以看到正确的文字,因为>可以接受JLabel

要解决此问题,在向JLabel添加文本之前,您可以退回从XML文档中获取的内容。

e.g。使用StringEscapeUtils.escapeXml(请注意,这只会转义&lt; &gt; &amp; &apos; &quot;个字符。否则,请查看escapeHtml

JLabel label = new JLabel("<html><b>"+StringEscapeUtils.escapeXml(docXml.getValue("negative", 0)) +"</b></html>");

不幸的是,Node.getTextContent()文档中缺少此信息,因此如果您的XML包含转义文本,则必须始终小心谨慎,并且不要依赖返回的文本。