(PHP 5, PHP 7, PHP 8)
DOMXPath::query — Evalúa la expresión XPath dada
$expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed
Evalúa la expresión expression XPath dada.
expressionLa expresión XPath a ejecutar.
contextNode
El argumento opcional contextNode puede ser especificado
para realizar consultas XPath relativas. Por omisión, las consultas son relativas
al elemento raíz.
registerNodeNSWhether to automatically register the in-scope namespace prefixes of the context node to the DOMXPath object. This can be used to avoid needing to call DOMXPath::registerNamespace() manually for each in-scope namespaces. When a namespace prefix conflict exists, only the nearest descendant namespace prefix is registered.
Devuelve un DOMNodeList que contiene todos los nodos
que coinciden con la expresión expression XPath dada.
Todas las expresiones que no devuelvan ningún nodo devolverán
un DOMNodeList vacío.
Si el argumento expression está malformado o
el argumento contextNode es inválido,
DOMXPath::query() devolverá false.
Los siguientes errores pueden ocurrir al utilizar una expresión que invoca retrollamadas PHP.
php:function es utilizada y el nombre del gestor
no es un string.
Ejemplo #1 Recuperación de todos los libros en inglés
<?php
$doc = new DOMDocument;
// No queremos preocuparnos por los espacios en blanco
$doc->preserveWhiteSpace = false;
$doc->load('examples/book-docbook.xml');
$xpath = new DOMXPath($doc);
// Comenzamos en el elemento raíz
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo "Libro encontrado {$entry->previousSibling->previousSibling->nodeValue}," .
" por {$entry->previousSibling->nodeValue}\n";
}
?>El resultado del ejemplo sería:
Libro encontrado : The Grapes of Wrath, por John Steinbeck Libro encontrado : The Pearl, por John Steinbeck
También podemos utilizar el argumento contextNode
para acortar nuestra expresión :
<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->load('examples/book-docbook.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// nuestra consulta es relativa al nodo tbody
$query = 'row/entry[. = "en"]';
$entries = $xpath->query($query, $tbody);
foreach ($entries as $entry) {
echo "Libro encontrado : {$entry->previousSibling->previousSibling->nodeValue}," .
" por {$entry->previousSibling->nodeValue}\n";
}
?>