java - 无法解析包含 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]
有没有办法声明一般实体,这样我就不必处理这个异常。
解决方案
如果您可以编辑正在解析的 XML,并且 XML 在文档开头有 DOCTYPE 声明,则需要为以下内容添加实体声明ensp
:
<!ENTITY ensp " ">
如果您可以编辑 XML,但它没有 DOCTYPE 声明,您可以组成一个通用的,如下所示:
<!DOCTYPE root [
<!ELEMENT root ANY>
<!ENTITY ensp "Ὸ">
]>
... content ...
whereroot
替换为您拥有的 XML 数据的文档元素(根元素)。
如果您想将所有 HTML 实体扩展为数字字符实体(不仅仅是ensp
),请查看https://www.w3.org/TR/html5/single-page.html#named-character-references或http: //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)。
推荐阅读
- javascript - 如何根据滚动位置触发或停止 jQuery 函数?
- r - 以从标准正态分布绘制的向量为条件的二项分布绘制
- django - 如何在 django rest 框架中使用自定义表进行身份验证
- angular - 获取动态组件可能附加到的 ViewContainerRef
- java - htmlunit:发送 POST 表单并检索响应
- javascript - 在javascript razor中比较2个json并合并到1个json
- android - 如何在android中更新视图的背景颜色?
- c - 如何将第一个数字移动到C中数字的最后一个位置
- html - CSS 宽度和边距不与媒体查询相加
- php - 只更新表 SQL 中的一列