2012-02-16 84 views
3

我想解析一个包含符合XML 1.1 spec的XML内容的字符串。 XML包含字符引用,这些引用在XML 1.0规范中是不允许的,但在XML 1.1规范中允许使用(在U + 0001-U + 001F范围内转换为Unicode字符的字符引用)。如何解析使用Java和Xerces确认1.1规范的XML?

根据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?

回答

2

See here查看xerces支持的所有功能列表。可能低于2个功能是你必须打开的。

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

真:执行的Unicode规范化检查(在第2.13和XML 1.1建议书的附录B中的描述),并报告归一化的误差。

错误:请勿报告Unicode规范化错误。

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

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

1

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