首页 > 解决方案 > 无法解析包含 java 中的 html 字符实体的 xml

问题描述

当 xml 由 html 字符实体组成时,它会抛出这样的异常

[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Undeclared general entity "ensp"
at [row,col {unknown-source}]: [1,66475]

有没有办法声明一般实体,这样我就不必处理这个异常。

标签: javaxml

解决方案


如果您可以编辑正在解析的 XML,并且 XML 在文档开头有 DOCTYPE 声明,则需要为以下内容添加实体声明ensp

<!ENTITY ensp "&#8194;">

如果您可以编辑 XML,但它没有 DOCTYPE 声明,您可以组成一个通用的,如下所示:

<!DOCTYPE root [
  <!ELEMENT root ANY>
  <!ENTITY ensp "&#8184;">
]>
... content ...

whereroot替换为您拥有的 XML 数据的文档元素(根元素)。

如果您想将所有 HTML 实体扩展为数字字符实体(不仅仅是ensp),请查看https://www.w3.org/TR/html5/single-page.html#named-character-referenceshttp: //sgmljs.net/docs/html5.html#named-character-references

如果您无权访问或无法更改或不想更改 XML(例如当您从网络中提取 XML 时),那么您可能会幸运地使用 Java 的 JAXP API 开发自定义EntityResolver并让您的 XML 解析管道使用您的自定义实体解析器(参见https://docs.oracle.com/javase/8/docs/api/org/xml/sax/EntityResolver.html)。


推荐阅读