(PHP >= 8.4.0)
DOMXPath::registerPhpFunctionNS — Registra una función PHP como una función XPath en un espacio de nombres
$namespaceURI, string $name, callable $callable): voidEste método permite utilizar una función PHP como una función XPath con espacio de nombres dentro de expresiones XPath.
namespaceURILa URI del espacio de nombres.
nameLa función local dentro del espacio de nombres.
callableLa función PHP a llamar cuando la función XPath es llamada en la expresión XPath. Cuando una lista de nodos es pasada como argumento a la retrollamada, el argumento se convierte en un array que contiene los nodos DOM correspondientes.
Lanza una ValueError si el nombre de un callback no es válido.
Levanta una excepción ValueError si
options contiene una opción inválida.
Levanta una excepción ValueError si
overrideEncoding utiliza un codificado desconocido.
Lanza una TypeError si un callback dado no es llamable.
No se retorna ningún valor.
Ejemplo #1 Registra una función XPath en un espacio de nombres y la llama desde la expresión XPath
<?php
$xml = <<<EOB
<books>
<book>
<title>PHP Basics</title>
<author>Jim Smith</author>
<author>Jane Smith</author>
</book>
<book>
<title>PHP Secrets</title>
<author>Jenny Smythe</author>
</book>
<book>
<title>XML basics</title>
<author>Joe Black</author>
</book>
</books>
EOB;
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
// Registra el espacio de nombres my: (obligatorio)
$xpath->registerNamespace("my", "urn:my.ns");
// Registra las funciones PHP
$xpath->registerPhpFunctionNS(
'urn:my.ns',
'substring',
fn (array $arg1, int $start, int $length) => substr($arg1[0]->textContent, $start, $length)
);
// Llamada a la función substr en el título del libro
$nodes = $xpath->query('//book[my:substring(title, 0, 3) = "PHP"]');
echo "Encontrados {$nodes->length} libros cuyo título comienza con 'PHP':\n";
foreach ($nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo "$title por $author\n";
}
?>Resultado del ejemplo anterior es similar a:
Encontrados 2 libros cuyo título comienza con 'PHP': PHP Basics por Jim Smith PHP Secrets por Jenny Smythe