(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMXPath::registerPhpFunctions — Registra una función PHP como función XPath
Este método activa la posibilidad de utilizar funciones PHP en expresiones XPath.
restrict
Utilice este parámetro únicamente para autorizar ciertas funciones a ser llamadas desde XPath.
Este parámetro puede ser uno de los siguientes elementos: un string (nombre de función), un array indexado conteniendo nombres de funciones, o un array asociativo con claves correspondientes a nombres de funciones y valores asociados correspondientes a callable.
No devuelve ningún valor.
options
contains an invalid option.
overrideEncoding
is an unknown encoding.
Versión | Descripción |
---|---|
8.4.0 | Los nombres de callback inválidos ahora lanzan una ValueError. Pasar una entrada no llamable ahora lanza una TypeError. |
8.4.0 |
Ahora es posible utilizar callables para callbacks
al utilizar restrict con entradas de tipo array.
|
Los siguientes ejemplos utilizan el fichero book.xml que contiene los siguientes datos:
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:function
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Registra el espacio de nombres php (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Registra las funciones PHP (Sin restricciones)
$xpath->registerPhpFunctions();
// Llama a la función substr en el título del libro
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');
echo "{$nodes->length} libros encontrados 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:
2 libros encontrados cuyo título comienza con 'PHP': PHP Basics por Jim Smith PHP Secrets por Jenny Smythe
Ejemplo #3 Ejemplo con DOMXPath::registerPhpFunctions()
y php:function
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Registra el espacio de nombres php (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Registra funciones PHP (solo has_multiple)
$xpath->registerPhpFunctions("has_multiple");
function has_multiple($nodes) {
// Retorna true si hay más de un autor
return count($nodes) > 1;
}
// Filtra los libros cuyos autores son múltiples
$books = $xpath->query('//book[php:function("has_multiple", author)]');
echo "Libros con múltiples autores :\n";
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}
?>
El resultado del ejemplo sería algo similar a:
Libros con múltiples autores : PHP Basics
Ejemplo #4 DOMXPath::registerPhpFunctions() con un callable
<?php
$doc = new DOMDocument;
$doc->load('examples/book-simple.xml');
$xpath = new DOMXPath($doc);
// Registrar el namespace php: (necesario)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Registrar las funciones PHP (solo has_multiple)
$xpath->registerPhpFunctions(["has_multiple" => fn ($nodes) => count($nodes) > 1]);
// Filtrar los libros con múltiples autores
$books = $xpath->query('//book[php:function("has_multiple", author)]');
echo "Libros con múltiples autores :\n";
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}
?>
El resultado del ejemplo sería algo similar a:
Libros con múltiples autores : PHP Basics