(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.
namespaceURI
name
callable
options
contains an invalid option.
overrideEncoding
is an unknown encoding.
No devuelve 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";
}
?>
El resultado del ejemplo sería algo similar a:
Encontrados 2 libros cuyo título comienza con 'PHP': PHP Basics por Jim Smith PHP Secrets por Jenny Smythe