5

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 をより適切にサポートする代替パーサーはありますか?

4

2 に答える 2

2

xerces でサポートされているすべての機能のリストについては、こちらを参照してください。以下の 2 つの機能を有効にする必要があります。

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

True: Unicode 正規化チェックを実行し (XML 1.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 のみをサポートします。
アクセス: 読み取り専用 導入されたバージョン: Xerces-J 2.7.0 注: この機能の価値は、SAX パーサーが所有するパーサー構成が XML 1.1 をサポートすることがわかっているかどうかによって異なります。

于 2012-02-16T14:00:20.977 に答える
1

Xercesでこれを行う方法はわかりませんが、 WoodstoxはそのままXML1.1をサポートしています。これは主にStaxパーサーですが、SAX APIも実装しています(バージョン3.2以降)。

于 2012-03-05T23:55:26.720 に答える