我正在尝试解析一个包含符合XML 1.1 spec的XML内容的字符串。XML包含在XML 1.0规范中不允许但在XML 1.1规范中允许的字符引用(转换为U+0001-U+001F范围内的Unicode字符的字符引用)。
根据Xerces2 website,,Xerces2解析器支持解析XML1.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;...but它仍然被解析为1.0XML(仍然生成无效的字符引用异常)。
如何配置Xerces解析器将XML解析为XML1.1?是否有其他解析器可以为XML 1.1提供更好的支持?
发布于 2012-02-16 22:00:21
See here,获取xerces支持的所有特性的列表。可能是下面两个功能是你必须打开的。
http://xml.org/sax/features/unicode-normalization-checking
True:执行Unicode规范化检查(如XML1.1推荐标准的第2.13节和附录B所述)并报告规范化错误。
False:不报告Unicode规范化错误。
http://xml.org/sax/features/xml-1.1
True:解析器同时支持XML 1.0和XML 1.1。
False:解析器仅支持XML 1.0。
注意:此特性的值将取决于SAX解析器所拥有的解析器配置是否支持XML 1.1。
发布于 2012-03-06 07:55:27
不知道如何使用Xerces做到这一点,但是Woodstox开箱即支持XML1.1。虽然它主要是Stax解析器,但它也实现了SAX API (从3.2版开始)。
https://stackoverflow.com/questions/9312517
复制相似问题