1

Stax を使用すると、次のような XML ブロックがあることに驚きました。

<badger>
    <![CDATA[Text about a badger]]>
</badger>

次のように扱われます。

START_ELEMENT (badger)
CHARACTERS (        Text about a badger    )
END_ELEMENT (badger)

つまり、CDATA と周囲のテキストは 1 つのテキスト要素にフラット化されます。CDATA 要素が検出されませんでした。

これは正しい動作ですか?空白を CDATA から分離するにはどうすればよいですか?

私はwoodstoxの実装を使用しています。

4

3 に答える 3

4

プロパティ「XMLInputFactory.IS_COALESCING」がtrueに設定されていると思われます(または、デフォルトで有効になっているWoodstox 3.2を使用しています-これはデフォルトのstax仕様が示唆するものではありません。つまり、マイナーなバグでした)。これにより、CDATA から CHARACTERS への変換が強制され、隣接するテキスト セグメントがあれば結合されます。

これ以外に、Woodstox は CDATA セクションを別個のものとして報告します。しかし、Stax 仕様には変換のための「興味深い」要件がいくつかあります。専門家グループのメンバーは、CDATA が CHARACTERS とは異なる方法で処理されるという考えを嫌っているようでした。

したがって、それらを個別に報告したい場合は、必ず IS_COALESCING を無効にしてください。

inputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
于 2010-12-20T19:01:29.640 に答える
3

CDATA は要素ではありません。これは、そのセクション内でネストされたタグをわざわざ検索しないように XML パーサーに指示するエスケープ メカニズムです。これは、< や & などの文字を含むテキストを個別にエスケープする手間を省くため、または通常のエスケープ シーケンスが機能しない他の理由がある場合に便利です。

于 2010-12-05T00:21:16.560 に答える
0

woodstox の実装についてはわかりませんが、2006 年に解決されたこのバグは依然として要因になるのでしょうか? オプションのreport-cdata-event プロパティを設定していますか?

(同様の問題に関するこのメッセージも参照してください。)

于 2010-12-05T02:14:51.520 に答える