Skip to main content

Search 400 pages — tools, formats, elements, namespaces, directory, comparisons, XPath, datatypes, glossary, parse errors, schema errors, use cases, guides, blog and product.

XPath operator

node() test

Matches every node kind on an axis: elements, text, comments, processing instructions, and the root node.

node() is the broadest node test. On the child axis it selects every child node, including indentation whitespace, comments, and processing instructions that * does not select.

It appears inside the definition of //: /descendant-or-self::node()/. That is why // can bridge any number of element levels without naming them.

Syntax
axis::node()
Returns
node-set
Kind
Operator
Version
XPath 1.0 (libxml2)

Worked examples

Each result below is what the evaluator returned, asserted on every test run. An empty result means an empty node-set — which is an answer, not an error.

  • count(/order/node())on order.xmlRun
    11
  • count(/order/*)on order.xmlRun
    3
  • count(/order/node()[self::*])on order.xmlRun
    3

    Filter the broad node set back down to elements.

Run your own expression

What catches people out

  • Indentation is text. child::node() often returns more nodes than the source visually suggests.
  • * is an element name wildcard, not a wildcard for every node kind.
  • Serializers may preserve or discard comments and processing instructions depending on parser settings.

The sample documents

Every example on this page runs against this document. The sitemap one is namespaced on purpose — almost every real XML document is, and that changes which expressions match.

order.xml
<?xml version="1.0" encoding="UTF-8"?>
<order id="A-1001" tier="gold">
  <customer country="NO">Ada Lovelace</customer>
  <!-- priority customer -->
  <?audit retained?>
  <lines>
    <line sku="WIDGET-1" qty="2"><price>14.50</price></line>
    <line sku="WIDGET-2" qty="1"><price>39.00</price></line>
    <line sku="GIFT-WRAP" qty="1"><price>0.00</price></line>
  </lines>
  <note>  Deliver after 09:00  </note>
</order>

Related

All 40 XPath entries

Get started

Bring order to the XML your team can't afford to ignore.

Create a free account and get a private workspace to search, validate, diff, and monitor your XML feeds, sitemaps, schemas, and vendor integrations.