DOMXPath::query
(PHP 5)
DOMXPath::query — Evalúa la expresión XPath dada
Descripción
$expression
[, DOMNode $contextnode
[, bool $registerNodeNS = true
]] )
Ejecuta la expresión XPath dada por expression.
Parámetros
-
expression -
La expresión XPath a ejecutar.
-
contextnode -
El parámetro opcional
contextnodese puede especificar para hacer consultas XPath relativas. Por omisión, las consultas son relativas al elemento raíz. -
registerNodeNS -
El parámetro opcional
registerNodeNSpuede 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.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.3 |
Se añadió el parámetro registerNodeNS.
|
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