我必须解析Java中的一堆XML文件,有时 - 并且无效地 - 包含HTML实体,例如—,>等等.我理解处理这个问题的正确方法是在解析之前向XML文件添加合适的实体声明.但是,我无法做到这一点,因为我无法控制这些XML文件.
是否存在我可以覆盖的某种回调,只要Java XML解析器遇到这样的实体就会调用它?我无法在API中找到一个.
我想用:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = dbf.newDocumentBuilder();
Document doc = parser.parse( stream );
Run Code Online (Sandbox Code Playgroud)
我发现我可以重写resolveEntity的org.xml.sax.helpers.DefaultHandler,但我要如何使用这与更高级别的API?
这是一个完整的例子:
public class Main {
public static void main( String [] args ) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = dbf.newDocumentBuilder();
Document doc = parser.parse( new FileInputStream( "test.xml" ));
}
Run Code Online (Sandbox Code Playgroud)
}
使用test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>Some text — invalid!</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
生产:
[Fatal Error] :3:20: The entity …Run Code Online (Sandbox Code Playgroud)