Java XML解析:避免实体引用解析
我目前正在使用DOM解析器解析XHTML文档,如: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
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>€</p>
但是:
< L> > p>我不喜欢这个,因为我担心这可能会使一些解析器实现不能从XHTML 1严格的DTD导航到实体LATIN DTD,因此不考虑“E.EUL.”作为声明的实体。
非常感谢。我采用的方法是用Xerces视为纯文本的唯一标记替换任何实体。转换为文档对象后,标记将替换为实体引用对象
请参见我的解析器创建文本节点中的convertStringToDocument()函数。。您是如何测试的?是的,经过大量的搜索和测试,我最终做了类似的事情:我创建了一个Reader(java.io.BufferedReader的扩展),它可以动态地用另一个符号替换XML实体中的“&”符号,然后对解析后的文档进行后处理,用符号替换回这些符号。它看起来不干净,因为它不干净;-),但它是有效的。
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);