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

Whether 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.

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 resultado del ejemplo sería:

Hay 2 libros en inglés

Ver también