XML 1.1 仕様に準拠する XML コンテンツを含む文字列を解析しようとしています。XML には、XML 1.0 仕様では許可されていないが、XML 1.1 仕様では許可されている文字参照 (U+0001 ~ U+001F の範囲の Unicode 文字に変換される文字参照) が含まれています。
Xerces2 Web サイトによると、Xerces2 パーサーは XML 1.1 ドキュメントの解析をサポートしています。しかし、解析しようとしている XML に 1.1 準拠の XML が含まれていることを伝える方法がわかりません。
私は XML を解析するために DocumentBuilder を使用しています (このようなもの):
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が1.1仕様に準拠していることを示すようにXMLヘッダーを設定しようとしました...
xmlString = "<?xml version=\"1.1\" encoding=\"UTF-8\" ?>" + xmlString;
...しかし、それでも 1.0 XML として解析されます (依然として無効な文字参照の例外が生成されます)。
XML を XML 1.1 として解析するように Xerces パーサーを構成するにはどうすればよいですか? XML 1.1 をより適切にサポートする代替パーサーはありますか?