XPath は X の子を持つノードのみを返すことができますか?

StackOverflow https://stackoverflow.com/questions/105613

  •  01-07-2019
  •  | 
  •  

質問

XPath を使用して、特定の子要素を持つノードのみを選択することはできますか?たとえば、この XML では、「bar」の子を持つペットの要素のみが必要です。したがって、結果として得られるデータセットには、 lizard そして pig この例の要素:

<pets>
  <cat>
    <foo>don't care about this</foo>
  </cat>
  <dog>
   <foo>not this one either</foo>
  </dog>
  <lizard>
   <bar>lizard should be returned, because it has a child of bar</bar>
  </lizard>
  <pig>
   <bar>return pig, too</bar>
  </pig>
</pets>

この Xpath はすべてのペットを提供します。 "/pets/*", ただし、name の子ノードを持つペットのみが必要です 'bar'.

役に立ちましたか?

解決

栄光のすべてがここにあります

/pets/*[bar]

英語:の子供たちをすべて私に与えてください pets 子供がいる人 bar

他のヒント

/pets/child::*[child::bar]

申し訳ありませんが、前の返信に対するコメントを見ていませんでした。

しかし、この場合、私はむしろ、 descendant:: 軸には、指定された以下のすべての要素が含まれます。

/pets[descendant::bar]

子についてより具体的にしたい場合に備えて、子に対してセレクターを使用することもできます。

例:

<pets>
    <cat>
        <foo>don't care about this</foo>
    </cat>
    <dog>
        <foo>not this one either</foo>
    </dog>
    <lizard>
        <bar att="baz">lizard should be returned, because it has a child of bar</bar>
    </lizard>
    <pig>
        <bar>don't return pig - it has no att=bar </bar>
    </pig>
</pets>

今、あなたはすべてのことだけを気にします pets 子供がいる bar 属性を持っているもの att 価値のあるもの baz. 。次の xpath 式を使用できます。

//pets/*[descendant::bar[@att='baz']]

結果

<lizard>
    <bar att="baz">lizard should be returned, because it has a child of bar</bar>
</lizard>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top