【问题标题】:Don't read '&lt;' with XML-file in JLabel不要在 JLabel 中使用 XML 文件读取 '<'
【发布时间】:2015-05-17 01:07:04
【问题描述】:

我有一个包含符号 '&lt (' 的 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();
}

并将其显示在带有 HTMLJLabel 中:

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

但是这个值显示没有符号。如果您不使用 HTML,则会显示它。如何使这个符号用 HTML 显示?谢谢!
附言&gt (>) 符号显示正确!

【问题讨论】:

  • 您可能需要转义您尝试显示的内容。您可以使用 apache commons 来解决 StringEscapeUtils.escapeHtml(String) 的问题。否则你可以手动转义5个更常见的字符来转义:&amp;-->&amp;amp;, &amp;lt;, &gt;-->&amp;gt, ' --> @987654331 @, " --> &amp;#x22

标签: java html xml swing jlabel


【解决方案1】:

Node.getTextContent() 已经返回未转义的文本。因此,当您尝试从 &lt;child&gt; 获取文本时,您得到的是 &lt;100

JLabel 假定

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

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

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

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

很遗憾,Node.getTextContent() 文档中缺少此信息,因此如果您的 XML 包含转义文本,您必须始终小心,不要依赖返回的文本。

【讨论】:

  • 虽然在这种情况下escapeHtml 和escapeXml 会返回相同的东西,但是在HTML 上下文中使用escapeXml 感觉有点奇怪,不是吗?
  • 我认为这显然取决于需求。我个人选择 escapeXml,只要我只需要基本的 5 次转义,如果我不确定 - 我会选择 escapeHtml。同样在 lang3 中,还有 escapeHtml4 和 escapeHtml3 ,所以我不打扰自己使用哪一个,而是使用 escapeXml。
  • 哦,谢谢您的详细回复!我需要使用以下内容吗? import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringEscapeUtils;.
  • @Tomas 是的,你需要org.apache.commons.lang.StringEscapeUtils。您不需要 FileUtils(至少用于转义)
  • @Tomas 是的,这是来自 apache commons - commons.apache.org/proper/commons-lang 。作为替代方案,如果您有机会使用 Spring,您可以尝试这个docs.spring.io/spring/docs/current/javadoc-api/org/… 或查看此主题 - stackoverflow.com/questions/1265282/… 您可以找到一些替代方法,如何在 Java 中转义 html。希望有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2016-08-31
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多