不要在 JLabel 中用 XML-file 读取 '<'

Don't read '&lt;' with XML-file in JLabel

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

<?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();
}

并将其显示在 JLabelHTML:

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

但是这个值 没有 符号 <。如果不使用HTML,则显示。如何让这个符号显示为HTML?谢谢!
P.S。符号 > (>) 正确显示 !

Node.getTextContent() 已经 returns 未转义文本。因此,当您尝试从 <child> 获取文本时,您得到的是 <100.

JLabel 假定 < 是 html 元素的无效开始标记的一部分,并将其删除。

使用&gt时您可以看到正确的文本,因为>对于JLabel是可以接受的。

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

例如使用 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 包含转义文本,请不要依赖返回的文本。