如何使用 XMLReaderFactory 现在?因为它已被弃用。

11

我正在尝试使用XMLReaderFactory,但这已经过时了。 现在,我应该如何创建XMLReader实例?

3个回答

24

XMLReaderFactory的文档建议使用SAXParserFactory

SAXParserFactory parserFactory = SAXParserFactory.newInstance();
SAXParser parser = parserFactory.newSAXParser();
XMLReader reader = parser.getXMLReader();

@Igor 如果这篇帖子回答了你的问题,请考虑将答案标记为“已接受”。请参考当有人回答我的问题时我该怎么做? - fantaghirocco
1
一些新的XMLReader与之前的代码不兼容,可能这就是为什么它没有被接受的原因。我将回退到已弃用的工厂。 - Thomas

0

XMLReader xmlReader = org.apache.poi.util.XMLHelper.newXMLReader(); 创建一个新的SAX XMLReader,具有合理的默认值。


0
这里有同样的问题,因为我们刚从Jdk8跳到jdk17,为了兼容性,这是我自己工厂的代码:
XMLReader saxReader;
try {
    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    parserFactory.setNamespaceAware(true);
    SAXParser parser = parserFactory.newSAXParser();
    XMLReader saxReader  = parser.getXMLReader();           
    saxReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
} catch (javax.xml.parsers.ParserConfigurationException parseEx) {
    throw new SAXException(parseEx);
} 

将解析器ns感知的问题解决了,解决了与DefaultHandler的使用链接的兼容性问题。 XXE保护已经存在(参见:owasp XXE),但我认为还是值得一提的。
try catch包装是因为现在抛出了一个新的异常(如果可以的话,您可以删除此部分并在其他地方处理异常)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接