Регистрация функций PHP как XPath функций


(PHP 5 >= 5.3.0)

DOMXPath::registerPhpFunctions Регистрация функций PHP как XPath функций

Описание

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

Этот метод включает возможность использовать PHP функции в XPath выражениях.

Список параметров

restrict

Используйте этот аргумент для включения возможности вызывать из XPath выражений только определенные функции.

Этот аргумент может иметь тип string (имя функции) или array (массив имен функций).

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Дальнейшие примеры используют файл book.xml, содержимое которого следующее:

Пример #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>

Пример #2 DOMXPath::registerPHPFunctions() с php:functionString

<?php
$doc 
= new DOMDocument;
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// Регистрация PHP: пространство имен (необходимо)
$xpath->registerNamespace("php""http://php.net/xpath");

// Регистрация PHP функций (без ограничений)
$xpath->registerPHPFunctions();

// Вызов функции substr применительно к названию книги
$nodes $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');

echo 
"Найдены книги {$nodes->length} начинающиеся со слова 'PHP':\n";
foreach (
$nodes as $node) {
    
$title  $node->getElementsByTagName("title")->item(0)->nodeValue;
    
$author $node->getElementsByTagName("author")->item(0)->nodeValue;
    echo 
"$title автора $author\n";
}

?>

Результатом выполнения данного примера будет что-то подобное:

 Найдены книги (2) начинающиеся со слова 'PHP': PHP Basics автора Jim Smith PHP Secrets автора Jenny Smythe 

Пример #3 DOMXPath::registerPHPFunctions() с php:function

<?php
$doc 
= new DOMDocument;
$doc->load('book.xml');

$xpath = new DOMXPath($doc);

// Регистрация PHP: пространство имен (необходимо) 
$xpath->registerNamespace("php""http://php.net/xpath");

// регистрация PHP функций (только has_multiple)
$xpath->registerPHPFunctions("has_multiple");
 
function 
has_multiple($nodes) {
    
// возвращает true, если более одного автора
    
return count($nodes) > 1;
}
// Отбор книг с двумя и более авторами
$books $xpath->query('//book[php:function("has_multiple", author)]');

echo 
"Книги с двумя и более авторами:\n";
foreach (
$books as $book) {
    echo 
$book->getElementsByTagName("title")->item(0)->nodeValue "\n";
}

?>

Результатом выполнения данного примера будет что-то подобное:

 Книги с двумя и более авторами: PHP Basics 

Смотрите также

  • DOMXPath::registerNamespace() - Ассоциирует пространство имен с объектом DOMXPath
  • DOMXPath::query() - Выполняет заданное XPath выражение
  • DOMXPath::evaluate() - Вычисляет переданное XPath выражение и возвращает типизированный результат, если возможно