Php/docs/domxpath.registerphpfunctions
DOMXPath::registerPhpFunctions
(PHP 5 >= 5.3.0, PHP 7)
DOMXPath::registerPhpFunctions — Register PHP functions as XPath functions
Description
public DOMXPath::registerPhpFunctions
([ mixed $restrict
] ) : void
This method enables the ability to use PHP functions within XPath expressions.
Parameters
restrict
Use this parameter to only allow certain functions to be called from XPath.
This parameter can be either a string (a function name) or an array of function names.
Return Values
No value is returned.
Examples
The following examples use book.xml
which contains the following:
Example #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>
Example #2 DOMXPath::registerPHPFunctions() with php:functionString
<?php$doc = new DOMDocument;$doc->load('book.xml');$xpath = new DOMXPath($doc);// Register the php: namespace (required)$xpath->registerNamespace("php", "http://php.net/xpath%22);// Register PHP functions (no restrictions)$xpath->registerPHPFunctions();// Call substr function on the book title$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');echo "Found {$nodes->length} books starting with 'PHP':\n";foreach ($nodes as $node) { $title = $node->getElementsByTagName("title")->item(0)->nodeValue; $author = $node->getElementsByTagName("author")->item(0)->nodeValue; echo "$title by $author\n";}?>
The above example will output something similar to:
Found 2 books starting with 'PHP': PHP Basics by Jim Smith PHP Secrets by Jenny Smythe
Example #3 DOMXPath::registerPHPFunctions() with php:function
<?php$doc = new DOMDocument;$doc->load('book.xml');$xpath = new DOMXPath($doc);// Register the php: namespace (required)$xpath->registerNamespace("php", "http://php.net/xpath%22);// Register PHP functions (has_multiple only)$xpath->registerPHPFunctions("has_multiple"); function has_multiple($nodes) { // Return true if more than one author return count($nodes) > 1;}// Filter books with multiple authors$books = $xpath->query('//book[php:function("has_multiple", author)]');echo "Books with multiple authors:\n";foreach ($books as $book) { echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";}?>
The above example will output something similar to:
Books with multiple authors: PHP Basics
See Also
- DOMXPath::registerNamespace() - Registers the namespace with the DOMXPath object
- DOMXPath::query() - Evaluates the given XPath expression
- DOMXPath::evaluate() - Evaluates the given XPath expression and returns a typed result if possible