3

ルート ノード子ノードとして直接表示されるすべてのテキスト要素を抽出したいと思います。を使用してJava標準のsax機能を一目見ました。しかし、パスを認識しているようには見えません。DefaultHandler

問題は、 text-nodes のみを抽出するfirst-level onlyのではなく、ノードを取得することです。

これを行うための非DOM指向のアプローチはありますか? (ノード名は事前にわからないことに注意してください)

[編集]

サンプル入力

<root>
   <a>text1</a>
   <b>text2</b>
   <c>text3</c>
   <nested>
       <d>not_text4</d>
       ...
   <nested>
   ...
</root>

サンプル出力

Map<String, String> map := {
    {a, text1}
    {b, text2}
    {c, text3}
}

現在、DOM 指向の回避策として解決されています。SAX / STAX の xpath 式のサブセットを提供するライブラリは存在しますが。

4

2 に答える 2

2

SAX と StAX は、イベント指向であるため、本質的にパスを認識しません。解析レベルを追跡するハンドラーを実装することは確かに可能ですが、おそらくXPathを使用した方がよいでしょう。

必要な要素のみを保持する XSLT 変換を記述し、SAX または Stax を使用して結果を処理するという、やや複雑な戦術が考えられます。

于 2011-03-23T11:24:11.740 に答える
1

これは少しオーバーヘッドになりますが、xml を操作するための強力なツールが得られます。JAXBを試してください。

于 2011-03-23T09:49:24.017 に答える