DOMXPath::evaluate

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

DOMXPath::evaluate Evalúa una expresión XPath dada y devuelve un resultado tipado si es posible

Descripción

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

Ejecuta la expresión XPath expression y devuelve un resultado tipado si es posible.

Parámetros

expression

La 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 root.

registerNodeNS

Indica si se deben registrar automáticamente los prefijos de espacio de nombres en vigor del nodo de contexto en el objeto DOMXPath. Esto puede ser utilizado para evitar tener que llamar manualmente a DOMXPath::registerNamespace() para cada espacio de nombres en vigor. En caso de conflicto de prefijos de espacio de nombres, solo se registra el prefijo de espacio de nombres descendiente más cercano.

Errores/Excepciones

Los siguientes errores pueden ocurrir al utilizar una expresión que invoca retrollamadas PHP.

  • Lanza una Error si una retrollamada PHP es invocada pero ninguna retrollamada está registrada, o si la retrollamada nombrada no está registrada.
  • Lanza una TypeError si la sintaxis php:function es utilizada y el nombre del gestor no es un string.
  • Lanza una Error si un objeto no-DOM es devuelto por una retrollamada.

Valores devueltos

Devuelve un resultado tipado si es posible o un DOMNodeList que contiene todos los nodos que coinciden con la expresión XPath expression.

Si el argumento expression está mal formado o bien si el argumento contextNode es inválido, el método DOMXPath::evaluate() devolverá false.

Ejemplos

Ejemplo #1 Recuperación del número total de libros en inglés

<?php

$doc
= new DOMDocument;

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

$xpath = new DOMXPath($doc);

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

// nuestra consulta es relativa al nodo tbody
$query = 'count(row/entry[. = "en"])';

$entries = $xpath->evaluate($query, $tbody);
echo
"Hay $entries libros en inglés\n";

?>

El ejemplo anterior mostrará :

Hay 2 libros en inglés

Ver también