(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.
namespaceURInamecallableoptions contiene una opción inválida.
overrideEncoding utiliza un codificado desconocido.
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