XPath: Как проверить, существует ли атрибут?

Учитывая следующий XML, как я могу написать запрос XPath для вывода узлов, где существует атрибут foo?:

<node1>
  <node2>
    <node3 foo='bar'></node3>
    <node3></node3>
    <node3 bar='foo'></node3>
    <node3 foo='foobar'></node3>
  </node2>
</node1>

Ответ 1

Короткий и сладкий:

//*[@foo]

Конечно, вы должны использовать более конкретное выражение. Но с [@attributeName] вы получаете все узлы, которые имеют этот атрибут.

Ответ 2

Используйте следующее выражение XPath

//*[boolean(@foo)]

Ответ 3

Если вы используете и xpath, это может помочь вам:

count(//*[@foo])

он вернет счетчик node/child, у которого есть атрибут foo