1. ホーム
  2. xml

[解決済み] 複数のタグを選択するXPath

2022-02-19 22:43:19

質問

このような簡略化されたデータ形式があるとします。

<a>
    <b>
        <c>C1</c>
        <d>D1</d>
        <e>E1</e>
        <f>don't select this one</f>
    </b>
    <b>
        <c>C2</c>
        <d>D2</d>
        <e>E1</e>
        <g>don't select me</g>
    </b>
    <c>not this one</c>
    <d>nor this one</d>
    <e>definitely not this one</e>
</a>

をすべて選択するにはどうすればよいのでしょうか? C s, DE の子である B 要素ですか?

基本的には、以下のようなものです。

a/b/(c|d|e)

私自身の状況としては、単に a/b/ を選択するまでのクエリは C , D , E ノードは実はかなり複雑なので、このようなことは避けたい。

a/b/c|a/b/d|a/b/e

これは可能か?

どのように解決するのですか?

正解は :

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

この

a/b/*[local-name()='c' or local-name()='d' or local-name()='e']

は長すぎるし、正しくない . このXPath式は、次のようなノードを選択します。

OhMy:c

NotWanted:d 

QuiteDifferent:e