37

XPath を使用して、特定の子要素を持つノードのみを選択することは可能ですか? たとえば、この XML から、'bar' の子を持つペットの要素のみが必要です。したがって、結果のデータセットには、この例のlizardandpig要素が含まれます。

<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 は、すべての pet: を提供し"/pets/*"ますが、 name の子ノードを持つペットのみが必要です'bar'

4

3 に答える 3

55

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

/pets/*[bar]

pets日本語:の子を持つすべての子を教えてくださいbar

于 2008-09-19T21:06:27.463 に答える
26
/pets/child::*[child::bar]

申し訳ありませんが、以前の返信へのコメントが表示されませんでした。

ただし、この場合はdescendant::、指定された要素から下のすべての要素を含む軸を使用することをお勧めします。

/pets[descendant::bar]
于 2009-01-11T17:20:01.440 に答える
5

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

例:

<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>

ここで、 valueを持つ属性petsを持つすべての子を持つことのみを気にします。次の xpath 式を使用できます。bar attbaz

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

結果

<lizard>
    <bar att="baz">lizard should be returned, because it has a child of bar</bar>
</lizard>
于 2014-09-10T14:50:02.280 に答える