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

Java XML解析:避免实体引用解析,java,xml,dom,xml-parsing,sax,Java,Xml,Dom,Xml Parsing,Sax,我目前正在使用DOM解析器解析XHTML文档,如: final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); final DocumentBuilder db = dbf.newDocumentBuilder(); db.setEntityResolver(MY_ENTITY_RESOLVER); db.setErrorHandler(MY_ERROR_H

我目前正在使用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);
我的问题是,当我的文档包含实体引用时,例如:

<p>&euro;</p>
但是:

< L> > p>我不喜欢这个,因为我担心这可能会使一些解析器实现不能从XHTML 1严格的DTD导航到实体LATIN DTD,因此不考虑“E.EUL.”作为声明的实体。

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

  • 有什么想法吗?是否可以在DOM解析器中配置它,而无需对XHTML进行预处理并用所有“&”符号替换其他符号

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

    此外,我无法切换到非标准XML解析库。没有jdom,没有jsoup,没有HtmlCleaner,等等


    非常感谢。

    我采用的方法是用Xerces视为纯文本的唯一标记替换任何实体。转换为文档对象后,标记将替换为实体引用对象


    请参见我的解析器创建文本节点中的convertStringToDocument()函数。。您是如何测试的?是的,经过大量的搜索和测试,我最终做了类似的事情:我创建了一个Reader(java.io.BufferedReader的扩展),它可以动态地用另一个符号替换XML实体中的“&”符号,然后对解析后的文档进行后处理,用符号替换回这些符号。它看起来不干净,因为它不干净;-),但它是有效的。
    final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setExpandEntityReferences(false);