まず、整形式の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ドキュメントのストリーミングモードでも使用できます。