>(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DOMXPath::registerPhpFunctions — Enregistre une fonction PHP comme fonction XPath
Description
public
DOMXPath::registerPhpFunctions(string|array|null
$restrict =
null): void
Liste de paramètres
-
restrict
-
Utilisez ce paramètre uniquement pour autoriser certaines fonctions
à être appelées depuis XPath.
Ce paramètre peut être soit une chaîne de caractères (un nom de fonction) ou
un tableau de noms de fonctions.
Valeurs de retour
Aucune valeur n'est retournée.
Exemples
Les exemples suivants utilisent le fichier book.xml
qui contient les données suivantes :
Exemple #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>
Exemple #2 Exemple avec domxpath::registerPhpFunctions()
et php:functionString
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Enregistre l'espace de noms php (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Enregistre les fonctions PHP (Aucune restriction)
$xpath->registerPHPFunctions();
// Appèle la fonction substr sur le titre du livre
$nodes = $xpath->query('//book[php:functionString("substr", title, 0, 3) = "PHP"]');
echo "{$nodes->length} livres trouvés dont le titre commence par 'PHP':\n";
foreach ($nodes as $node) {
$title = $node->getElementsByTagName("title")->item(0)->nodeValue;
$author = $node->getElementsByTagName("author")->item(0)->nodeValue;
echo "$title par $author\n";
}
?>
Résultat de l'exemple ci-dessus est similaire à :
2 livres trouvés dont le titre commence par 'PHP':
PHP Basics par Jim Smith
PHP Secrets par Jenny Smythe
Exemple #3 Exemple avec domxpath::registerPhpFunctions()
et php:function
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Enregistre l'espace de noms php (nécessaire)
$xpath->registerNamespace("php", "http://php.net/xpath");
// Enregistre des fonctions PHP (has_multiple uniquement)
$xpath->registerPHPFunctions("has_multiple");
function has_multiple($nodes) {
// Retourne true s'il y a plus d'un auteur
return count($nodes) > 1;
}
// Filtre les livres dont les auteurs sont multiples
$books = $xpath->query('//book[php:function("has_multiple", author)]');
echo "Livres avec plusieurs auteurs :\n";
foreach ($books as $book) {
echo $book->getElementsByTagName("title")->item(0)->nodeValue . "\n";
}
?>
Résultat de l'exemple ci-dessus est similaire à :
Livres avec plusieurs auteurs :
PHP Basics
Voir aussi
- domxpath::registerNamespace() - Enregistre l'espace de noms avec l'objet DOMXPath
- DOMXPath::query() - Évalue l'expression XPath donnée
- domxpath::evaluate() - Évalue une expression XPath donnée et retourne un résultat typé si possible