2

次のような XML があり、xslt で xpath フィルタリングを使用して、要素 "b" と "c" の "a" の子だけを選択したい

<a>
  <b>data_1</b>
  <c>data_1</c>
  <d>data_1</d>
  <e>data_1</d>
</a>
<a>
  <b>data_2</b>
  <c>data_2</c>
  <d>data_2</d>
  <e>data_2</d>
</a>
<a>
  <b>data_3</b>
  <c>data_3</c>
  <d>data_3</d>
  <e>data_3</d>
</a>

提案?

4

2 に答える 2

1

まず、整形式のXMLドキュメントを提供していないことに注意してください。定義上、整形式のXMLドキュメントには単一の最上位要素が必要です。

aこの回答では、すべての要素がこの単一の最上位要素の子であると想定していますが、これは質問には示されていません。


使用

/*/a/*[self::b or self::c]

これにより、またはのいずれbかであり、XMLドキュメントの最上位要素の子である要素の子である要素がc選択されます。a

現在受け入れられている答えは正しくないことに注意してください。

/a/*[self::a or self::b or self::c]

単一のトップ要素がある(そしてそのようなものはない)と想定するだけでなくa、特定のXMLドキュメントが与えられると、必要な要素に加えてa、トップ要素の子である要素も選択しますa

上記で推奨するXPath式:

/*/a/*[self::b or self::c]

他の回答の1つで提案されている別の正しいXPath式よりも効率的です。

/a/b | /a/c

これには、別々/a/b/に評価し/a/cてから、2つの評価の結果の集合和集合を実行する必要があります。

私が推奨するXPath式は、ドキュメントの1回のスキャンのみを必要とし、ユニオンを必要とせず、無制限のサイズの巨大なXMLドキュメントのストリーミングモードでも使用できます。

于 2012-08-15T02:49:44.717 に答える
0

XPATH 2.0+ では、b & c を選択する最も簡単な式は ...

/a/(b|c)

XPATH 2.0 では、ノードをドキュメント順にソートする必要がない場合は、... も使用できることに注意してください。

/a/(b,c)

XPATH 1.0 では、次のものが必要になります。

/a/b | /a/c
于 2012-08-15T00:43:41.393 に答える