(PHP >= 8.4.0)
DOMXPath::registerPhpFunctionNS — Registra uma função PHP como função XPath com namespace
$namespaceURI
, string $name
, callable $callable
): voidEste método permite usar uma função PHP como uma função XPath com namespace dentro de expressões XPath.
namespaceURI
name
callable
options
contiver uma opção inválida.
overrideEncoding
for uma codificação desconhecida.
Nenhum valor é retornado.
Exemplo #1 Registra uma função XPath com namespace e a chama a partir da expressão 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 o namespace my: (obrigatório)
$xpath->registerNamespace("my", "urn:my.ns");
// Registra função PHP
$xpath->registerPhpFunctionNS(
'urn:my.ns',
'substring',
fn (array $arg1, int $start, int $length) => substr($arg1[0]->textContent, $start, $length)
);
// Chama a função substr no título do livro
$nodes = $xpath->query('//book[my:substring(title, 0, 3) = "PHP"]');
echo "Encontrados {$nodes->length} livros iniciando com '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";
}
?>
O exemplo acima produzirá algo semelhante a:
Encontrados 2 livros iniciando com 'PHP': PHP Basics por Jim Smith PHP Secrets por Jenny Smythe