XPath: Jak sprawdzić, czy atrybut istnieje?

104

Biorąc pod uwagę następujący kod XML, jak napisać zapytanie XPath w celu ściągnięcia węzłów, w których fooistnieje atrybut ? :

<node1>
  <node2>
    <node3 foo='bar'></node3>
    <node3></node3>
    <node3 bar='foo'></node3>
    <node3 foo='foobar'></node3>
  </node2>
</node1>
Byron Whitlock
źródło

Odpowiedzi:

163

Krótkie i słodkie:

//*[@foo]

Oczywiście powinieneś użyć bardziej konkretnego wyrażenia. Ale wraz z [@attributeName]tobą otrzymujesz wszystkie węzły, które mają ten atrybut.

Felix Kling
źródło
25

Użyj następującego wyrażenia XPath

//*[boolean(@foo)]
Ru5
źródło
8

Jeśli używasz i xpath, może ci to pomóc:

count(//*[@foo])

zwróci liczbę węzłów / dzieci, które mają atrybut foo

Fritz
źródło