如何使用Java和Xerces解析确认1.1规范的XML?

我正在尝试解析包含符合XML 1.1规范的 XML内容的String。 XML包含XML 1.0规范中不允许但在XML 1.1规范中允许的字符引用(字符引用转换为U + 0001-U + 001F范围内的Unicode字符)。

根据Xerces2网站, Xerces2解析器支持解析XML 1.1文档。 但是,我无法弄清楚如何告诉它我们试图解析的XML包含1.1兼容的XML。

我正在使用DocumentBuilder来解析XML(类似这样):

public Element parseString(String xmlString) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); InputSource source = new InputSource(new StringReader(xmlString)); // Throws org.xml.sax.SAXParseException becuase of the invalid character refs Document doc = documentBuilder.parse(source); return doc.getDocumentElement(); } catch (ParserConfigurationException pce) { // Handle the error } catch (SAXException se) { // Handle the error } catch (IOException ioe) { // Handle the error } } 

我已经尝试设置XML标头以指示XML符合1.1规范……

 xmlString = "" + xmlString; 

…但它仍然被解析为1.0 XML(仍然生成无效的字符引用exception)。

如何配置Xerces解析器以将XML解析为XML 1.1? 是否有替代解析器为XML 1.1提供更好的支持?

请参阅此处以获取xerces支持的所有function的列表。 可能低于2的function是您必须打开的。

http://xml.org/sax/features/unicode-normalization-checking

True:执行Unicode规范化检查(如第2.13节和XML 1.1建议书的附录B中所述)并报告规范化错误。

错误:不报告Unicode规范化错误。

http://xml.org/sax/features/xml-1.1

True:解析器支持XML 1.0和XML 1.1。
错误:解析器仅支持XML 1.0。
访问:只读从以下版本开始:Xerces-J 2.7.0注意:此function的值取决于SAX解析器拥有的解析器配置是否已知支持XML 1.1。

不知道如何使用Xerces执行此操作,但Woodstox支持XML 1.1开箱即用。 虽然它主要是一个Stax解析器,但它也实现了SAX API(从版本3.2开始)。