我正在尝试使用 XMLReaderFactory,但这已被弃用。 现在,我如何创建 XMLReader 的实例?
XMLReaderFactory
的文档建议SAXParserFactory
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
SAXParser parser = parserFactory.newSAXParser();
XMLReader reader = parser.getXMLReader();
XMLReader xmlReader = org.apache.poi.util.XMLHelper.newXMLReader();
创建一个新的 SAX XMLReader,具有合理的默认值。
这里有同样的问题,因为我们刚刚从 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);
}
使解析器意识到解决了与 DefaultHandler 使用相关的兼容性问题。
XXE 保护已经存在(参见:owasp XXE),但无论如何我认为值得一提。
try catch 包装是因为现在抛出了一个新的异常(如果可以的话,您可以删除这部分并在其他地方管理异常)
我也有同样的问题....
XMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
并且我没有找到替换 XMLReaderFactory 的示例:-(