我正在编写一个屏幕抓取应用程序,该应用程序可以读取各种页面并提取数据.我正在使用SAXParserFactory来获得一个SAXParser,这反过来又使我得到了XMLReader.我已经像这样配置了Factory:
spf = SAXParserFactory.newInstance();
spf.setValidating(false);
spf.setFeature("http://xml.org/sax/features/validation",false);
spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
spf.setFeature("http://xml.org/sax/features/use-entity-resolver2",false);
但是,每当我解析包含& nbsp实体的文档时,我都会得到一个
SEVERE: null
org.xml.sax.SAXParseException: The
entity "nbsp" was referenced,butnot declared.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
我知道它找不到该实体,因为我告诉工厂不要读取DTD,但是如何禁用所有实体检查呢?
编辑:这是针对Android应用程序的,这就是为什么我不愿意使用不在标准环境中的API /库的原因.
最佳答案
SAX似乎不具备此功能,但StAX API可以.有关设置方法,请参见this previous question/answer.
如果您是手工编写XML处理器,那么StAX API的处理要比SAX API容易得多,因此您在这两个方面都能取胜.