# DOMXPath::query

(PHP 5, PHP 7, PHP 8)

DOMXPath::query — Evalúa la expresión XPath dada

### Descripción

public DOMXPath::query(string `$expression`, ?DOMNode `$contextNode` = `null`, bool `$registerNodeNS` = `true`): mixed

Ejecuta la expresión XPath dada por `expression`.

### Parámetros

`expression`

  La expresión XPath a ejecutar.

`contextNode`

  El parámetro opcional `contextNode` se puede especificar para hacer consultas XPath relativas. Por omisión, las consultas son relativas al elemento raíz.

`registerNodeNS`

  El parámetro opcional `registerNodeNS` puede ser especificado para deshabilitar el registro automático del nodo de contexto.

### Valores devueltos

Devuelve un objeto DOMNodeList que contiene todos los nodos coincidentes con la expresión XPath dada por `expression`. Cualquier expresión que no devuelva nodos devolverá un objeto DOMNodeList vacío.

Si el parámetro `expression` está malformado o el parámetro `contextNode` es inválido, DOMXPath::query() devuelve `false`.

### Ejemplos

Ejemplo #1 Obtener todos los libros en inglés

`<?php
$doc = new DOMDocument;
// No queremos molestar con espacios en blanco
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Empezamos desde el elemento root
$consulta = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entradas = $xpath->query($consulta);
foreach ($entradas as $entrada) {
echo "Se encotró {$entrada->previousSibling->previousSibling->nodeValue}," .
" por {$entrada->previousSibling->nodeValue}\n";
}
?>`

El resultado del ejemplo sería:

    Se encontró The Grapes of Wrath, por John Steinbeck
    Se encontró The Pearl, por John Steinbeck

También podemos usar el parámetro `contextNode` para acortar nuestra expresión:

`<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// nuestra consulta es relativa al nodo tbody
$consulta = 'row/entry[. = "en"]';
$entradas = $xpath->query($consulta, $tbody);
foreach ($entradas as $entrada) {
echo "Se encontró {$entrada->previousSibling->previousSibling->nodeValue}," .
" por {$entrada->previousSibling->nodeValue}\n";
}
?>`

### Ver también

- DOMXPath::evaluate() - Evalúa la expresión XPath dada y devuelve un resultado escrito si es posible