DOMXPath::registerPhpFunctionNS

(PHP >= 8.4.0)

DOMXPath::registerPhpFunctionNSEnregistre une fonction PHP en tant que fonction XPath dans un espace de noms

Description

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

Cette méthode permet d'utiliser une fonction PHP en tant que fonction XPath dans les expressions XPath.

Liste de paramètres

namespaceURI
L'URI du namespace.
name
La fonction locale à l'intérieur du namespace.
callable
La fonction PHP à appeler lorsque la fonction XPath est appelée dans l'expression XPath. Lorsqu'une liste de nœuds est passée en paramètre à la fonction de rappel, l'argument devient un tableau contenant les nœuds DOM correspondants.

Erreurs / Exceptions

  • Lance une ValueError si le nom d'une fonction de rappel n'est pas valide.
  • Lève une exception ValueError si options contient une option invalide.
  • Lève une exception ValueError si overrideEncoding utilise un encodage inconnu.
  • Lance une TypeError si une fonction de rappel donnée n'est pas appelable.

Valeurs de retour

Aucune valeur n'est retournée.

Exemples

Exemple #1 Enregistre une fonction XPath dans un espace de noms et l'appelle depuis l'expression XPath

<?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);

// Enregistre le namespace my: (obligatoire)
$xpath->registerNamespace("my", "urn:my.ns");

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

// Appel de la fonction substr sur le titre du livre
$nodes = $xpath->query('//book[my:substring(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

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top