(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
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