DOMXPath::query

Evaluates the given XPath expression

&reftitle.description; public `mixed` `DOMXPath::query` `string` `expression` ``DOMNode``null```contextNode`&null; `bool` `registerNodeNS`&true;

Executes the given XPath `expression`.

&reftitle.parameters;

`expression`

- The XPath expression to execute.

`contextNode`

- The optional `contextNode` can be specified for doing relative XPath queries. By default, the queries are relative to the root element.

`registerNodeNS`

- The optional `registerNodeNS` can be specified to disable automatic registration of the context node.

&reftitle.returnvalues;

Returns a `DOMNodeList` containing all nodes matching the given XPath `expression`. Any expression which does not return nodes will return an empty `DOMNodeList`.

If the `expression` is malformed or the `contextNode` is invalid, `DOMXPath::query` returns &false;.

&reftitle.examples;

### Getting all the english books

    <?php

    $doc = new DOMDocument;

    // We don't want to bother with white spaces
    $doc->preserveWhiteSpace = false;

    $doc->load('book.xml');

    $xpath = new DOMXPath($doc);

    // We start from the root element
    $query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';

    $entries = $xpath->query($query);

    foreach ($entries as $entry) {
        echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
             " by {$entry->previousSibling->nodeValue}\n";
    }
    ?>

&example.outputs;

    Found The Grapes of Wrath, by John Steinbeck
    Found The Pearl, by John Steinbeck

We can also use the `contextNode` parameter to shorten our expression:

    <?php

    $doc = new DOMDocument;
    $doc->preserveWhiteSpace = false;

    $doc->load('book.xml');

    $xpath = new DOMXPath($doc);

    $tbody = $doc->getElementsByTagName('tbody')->item(0);

    // our query is relative to the tbody node
    $query = 'row/entry[. = "en"]';

    $entries = $xpath->query($query, $tbody);

    foreach ($entries as $entry) {
        echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
             " by {$entry->previousSibling->nodeValue}\n";
    }
    ?>

&reftitle.seealso;

- `DOMXPath::evaluate`