DOMXPath
PHP Manual

DOMXPath::registerPhpFunctions

(PHP 5 >= 5.3.0)

DOMXPath::registerPhpFunctionsRegistra funciones de PHP como funciones XPath

Descripción

public void DOMXPath::registerPhpFunctions ([ mixed $restrict ] )

Este método habilita la capacidad de usar funciones de PHP dentro de expresiones XPath.

Parámetros

restrict

Use este parámetro para permitir solamente que ciertas funciones sean llamadas desde XPath.

Este parámetro puede ser un string (un nombre de función) o un array de nombres de funciones.

Valores devueltos

No devuelve ningún valor.

Ejemplos

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

Ver también


DOMXPath
PHP Manual