php8.5
Home/ Manual/ dom / domxpath/ DOMXPath::registerPhpFunctionNS

DOMXPath::registerPhpFunctionNS

PHP function Edit on GitHub ✎

(PHP >= 8.4.0)

Register a PHP functions as namespaced XPath function

Description

DOMXPath::registerPhpFunctionNS(string $namespaceURI, string $name, callable $callable): void

This method enables the ability to use a PHP function as a namespaced XPath function inside XPath expressions.

Parameters

namespaceURI

The URI of the namespace.

name

The local function name inside the namespace.

callable

The PHP function to call when the XPath function gets called within the XPath expression. When a node list is passed as parameter to the callback, they are arrays containing the matched DOM nodes.

Return Values

Void

Examples

Register a namespaced XPath function and call it from the XPath expression

php
<?php

$xml = <<<EOB
<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>
EOB;

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);

// Register the my: namespace (required)
$xpath->registerNamespace("my", "urn:my.ns");

// Register PHP function
$xpath->registerPHPFunctionNS(
    'urn:my.ns',
    'substring',
    fn (array $arg1, int $start, int $length) => substr($arg1[0]->textContent, $start, $length)
);

// Call substr function on the book title
$nodes = $xpath->query('//book[my:substring(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:

output
Found 2 books starting with 'PHP':
PHP Basics by Jim Smith
PHP Secrets by Jenny Smythe

See Also

  • DOMXPath::registerNamespace
  • DOMXPath::query
  • DOMXPath::evaluate
  • XSLTProcessor::registerPHPFunctions
  • XSLTProcessor::registerPHPFunctionNS

Source: reference/dom/domxpath/registerphpfunctionns.xml · from the official PHP manual (php/doc-en)