我正在尝试解析包含符合XML 1.1 spec的XML内容的String。 XML包含XML 1.0规范中不允许但在XML 1.1规范中允许的字符引用(字符引用转换为U + 0001-U + 001F范围内的Unicode字符)。
根据Xerces2 website,,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 = "<?xml version=\"1.1\" encoding=\"UTF-8\" ?>" + xmlString;
...但它仍被解析为1.0 XML(仍然会生成无效的字符引用异常)。
如何配置Xerces解析器以将XML解析为XML 1.1?是否有另一种解析器可以为XML 1.1提供更好的支持?
答案 0 :(得分:2)
See here获取xerces支持的所有功能的列表。可能低于2的功能是您必须打开的。
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 注意:此功能的值取决于是否已知SAX解析器拥有的解析器配置支持XML 1.1。
答案 1 :(得分:1)
不确定如何使用Xerces执行此操作,但Woodstox支持XML 1.1开箱即用。虽然它主要是一个Stax解析器,但它也实现了SAX API(从版本3.2开始)。