Java引用和实体_Java XML解析:避免实体引用解析

我目前正在使用DOM解析器来解析XHTML文档,例如:

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setValidating(false);

final DocumentBuilder db = dbf.newDocumentBuilder();

db.setEntityResolver(MY_ENTITY_RESOLVER);

db.setErrorHandler(MY_ERROR_HANDLER);

...

final Document doc = db.parse(inputSource);

我的问题是,当我的文档包含一个实体引用时,例如:

我的解析器为包含“€”而不是“€”的内容创建了一个Text节点。这就是说,它正在按预期的方式解析实体(XHTML 1.0 Strict

DTD链接到ENTITIES Latin1 DTD,这反过来确定了“€”与“€”的对等)。

问题是,我不希望解析器执行此类操作。 我想保留“€” 文字未修改。

我已经尝试过:

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setExpandEntityReferences(false);

但:

我不喜欢这样做,因为我担心这会使某些解析器实现无法从XHTML 1.0 Strict DTD 导航 到ENTITIES Latin1 DTD,因此不考虑“€”。作为已 声明的 实体。

当我这样做时,它会奇怪地创建两个节点:一个“磅”实体节点和一个在其后带有“€”符号的文本节点。

有任何想法吗? 是否可以在DOM分析器中配置它而不用 预处理 XHTML并用所有“&”符号代替其他东西?

解决方案可以是DOM解析器,也可以是SAX解析器,我不介意使用SAX解析,然后使用转换来创建DOM。

另外,我不能切换到非标准的XML解析libray。没有jdom,没有jsoup,没有HtmlCleaner等。

非常感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值