Java SAX解析器引发UnknownHostException
我要解析的XML文件以以下内容开头:Java SAX解析器引发UnknownHostException,java,dtd,sax,Java,Dtd,Sax,我要解析的XML文件以以下内容开头: <!DOCTYPE plist PUBLIC "-//...//DTD PLIST 1.0//EN" "http://www.....dtd"> 您可以实现一个自定义的EntityResolver,它在XML解析期间用于查找外部实体 org.xml.sax.EntityResolver customEntityResolver = new DummyEntityResolver(); javax.xml.parsers.SAXParser pa
<!DOCTYPE plist PUBLIC "-//...//DTD PLIST 1.0//EN" "http://www.....dtd">
您可以实现一个自定义的
EntityResolver
,它在XML解析期间用于查找外部实体
org.xml.sax.EntityResolver customEntityResolver = new DummyEntityResolver();
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.getXMLReader().setEntityResolver(customEntityResolver);
parser.parse(xmlFile, handler);
在自定义EntityResolver中,始终返回null。我认为应该解决这个问题。您应该提供一个完整的解决方案来解决问题。我建议您编写一个解析器,它将知道如何在本地读取DTD(前提是您的应用程序附带了DTD)。否则,像Gowri建议的那样返回null 你可能想把这本书通读一遍
yc确定,结果是
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(""));
}
});
使用XMLReader而不是SAXParser
XMLReader reader =XMLReaderFactory.createXMLReader();
reader.setEntityResolver(new DummyEntityResolver());
reader.setContentHandler(handler);
reader.parse(inputSource);
它还应该与SAXParser一起工作,但由于某些原因,它不能工作
XMLReader reader =XMLReaderFactory.createXMLReader();
reader.setEntityResolver(new DummyEntityResolver());
reader.setContentHandler(handler);
reader.parse(inputSource);