(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMXPath::registerPhpFunctions — Registra funciones de PHP como funciones XPath
Este método habilita la capacidad de usar funciones de PHP dentro de expresiones XPath.
No devuelve ningún valor.
Los siguientes ejemplos usan book.xml que contiene lo siguiente:
Ejemplo #1 book.xml
<?xml version="1.0" encoding="UTF-8"?> <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>
Ejemplo #2 DOMXPath::registerPHPFunctions() con php:functionString
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Registrar el espacio de nombres php: namespace (requerido)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Registrar funciones de PHP (sin restricciones)
$xpath->registerPHPFunctions();
// Llamar a la función substr en el título del libro
$nodos = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');
echo "Se encontró {$nodos->length} libros que empiezan con 'PHP':\n";
foreach ($nodos as $nodo) {
$title = $nodo->getElementsByTagName("title")->item(0)->nodeValue;
$author = $nodo->getElementsByTagName("author")->item(0)->nodeValue;
echo "$title por $author\n";
}
?>
El resultado del ejemplo sería algo similar a:
Se encontró 2 libros que empiezan con 'PHP': PHP Basics por Jim Smith PHP Secrets por Jenny Smythe
Ejemplo #3 DOMXPath::registerPHPFunctions() con php:function
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Registrar el espacio de nombres php: namespace (requerido)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Registrar funciones de PHP (sólo has_multiple)
$xpath->registerPHPFunctions("has_multiple");
function has_multiple($nodos) {
// Return true if more than one author
return count($nodos) > 1;
}
// Filtrar libros con múltiples autores
$libros = $xpath->query('//book[php:function("has_multiple", author)]');
echo "Libros con múltiples autores:\n";
foreach ($libros as $libro) {
echo $libro->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}
?>
El resultado del ejemplo sería algo similar a:
Libros con múltiples autores: PHP Basics