我要解析的XML文件以:
<!DOCTYPE plist PUBLIC "-//...//DTD PLIST 1.0//EN" "http://www.....dtd">
Run Code Online (Sandbox Code Playgroud)
因此,当我启动SAX praser时,它会尝试在线访问此DTD,并且我得到一个java.net.UnknownHostException.
如何更改SAX Parser行为以便它不会尝试加载DTD?谢谢.
javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
factory.setValidating(false);
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.parse(xmlFile, handler);
Run Code Online (Sandbox Code Playgroud)
Gow*_*wri 10
好的,事实证明该parse()方法会覆盖任何先前设置的实体解析器,并将处理程序传递给parse方法.以下代码应该有效:
javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
factory.setValidating(false);
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.parse(new java.io.File("x.xml"), new org.xml.sax.helpers.DefaultHandler(){
public org.xml.sax.InputSource resolveEntity(String publicId, String systemId)
throws org.xml.sax.SAXException, java.io.IOException {
System.out.println("Ignoring: " + publicId + ", " + systemId);
return new org.xml.sax.InputSource(new java.io.StringReader(""));
}
});
Run Code Online (Sandbox Code Playgroud)
您可以实现一个自定义EntityResolver,用于在 XML 解析期间查找外部实体。
org.xml.sax.EntityResolver customEntityResolver = new DummyEntityResolver();
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.getXMLReader().setEntityResolver(customEntityResolver);
parser.parse(xmlFile, handler);
Run Code Online (Sandbox Code Playgroud)
在您的自定义 EntityResolver 中,始终返回 null。我认为这应该可以解决这个问题。
| 归档时间: |
|
| 查看次数: |
5422 次 |
| 最近记录: |