【问题标题】:Mixing entities with <br/> tag causes XML parser exception使用 <br/> 标签混合实体会导致 XML 解析器异常
【发布时间】:2012-02-14 15:02:51
【问题描述】:

我使用 Java 和 Apache Xerces XML 解析器。错误发生在org.apache.xerces.parsers.DOMParser.parse内部。

<content id="xxx">&amp;<br /></content>

如果我要解析的 XML 文档中出现这样的行,解析器会崩溃并返回以下错误消息:

org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.

我可以将问题的根源缩小到&lt;br /&gt; 的出现,因为如果我忽略它但无法理解导致损坏的原因,它会很好地工作。 & 符号已正确转义,不应以任何方式干扰 &lt;br /&gt; 作为 HTML 行分隔符的出现。

【问题讨论】:

  • 也是 XML 的特殊字符。如果您可以控制源 XML,我建议您使用 CDATA。
  • 我见过的任何文档都说必须终止所有标签,因为这不是 HTML。它是 XML。这就是人们应该开始遵循 XHTML 约定的原因。我认为终止
    很重要。
  • 如何重现这个问题? &lt;content id="xxx"&gt;&amp;amp;&lt;br /&gt;&lt;/content&gt; 是格式良好的 XML。

标签: java xml exception sax xerces


【解决方案1】:

你可以像这样把它放在!CDATA下面。如果这是您所追求的,这将使它不会被 XML 解析器解析。您可以阅读有关 CDATA 部分的更多信息here

&lt;content id="xxx"&gt;&amp;amp;&lt;![CDATA[&lt;br /&gt;]]/&gt;

【讨论】:

    【解决方案2】:

    您应该在 CDATA 中的标签之间放置文本:

    <content id="xxx"><![CDATA[&amp; <br />]]></content>
    

    或者这样写:

    <content id="xxx">&amp; &lt;br /&gt;</content>
    

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 2011-09-27
      • 2017-09-24
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多