Java解析含HTML字符实体的XML失败,求通用实体声明方案
解决XML解析中未声明实体"ensp"的异常问题
没错,你完全可以通过声明通用实体来避免这个Wstx解析异常。
原因很简单:XML规范里只预定义了少数几个实体(比如<、>、&这些),像 这类HTML专属的实体并不在XML的默认识别列表里,所以解析器碰到它时就会抛出「未声明通用实体」的错误。
具体的解决方法是在XML的DOCTYPE部分手动声明这个实体,把它映射到对应的Unicode字符引用。举个实际的例子:
<!DOCTYPE yourRootElement [ <!ENTITY ensp " "> ]> <yourRootElement> <!-- 现在就能正常使用 了 --> 示例文本 包含半角空格 </yourRootElement>
这里的 就是 对应的十六进制Unicode编码,解析器看到这个声明后,就会把文档里的 替换成对应的字符,自然就不会报错了。
额外提两个小建议:
- 如果你需要用到多个HTML实体,得逐个声明对应的实体;当然也可以引用包含这些实体的公共DTD,但如果是离线环境的话可能会有访问问题,手动声明反而更可靠。
- 另一种替代方案是在解析前把所有HTML实体替换成对应的Unicode引用,但从XML规范的角度来说,声明通用实体是更规范的做法。
内容的提问来源于stack exchange,提问作者Bibek Shakya
相关产品推荐
相关产品推荐

