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

前端之家收集整理的这篇文章主要介绍了如何配置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容易得多,因此您在这两个方面都能取胜.

猜你在找的Android相关文章