如何配置Java的SaxParserFactory禁用实体检查?

我正在编写一个屏幕抓取应用程序,该应用程序可以读取各种页面并提取数据.我正在使用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容易得多,因此您在这两个方面都能取胜.

上一篇:java-如何使用SAX获取xml标记的正确开始/结束位置?


下一篇:成都市白天、晚上人口分布图_点数据(间隔100m)和1km、3km网格数据