array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'fr', ), 'this' => array ( 0 => 'domxpath.query.php', 1 => 'DOMXPath::query', ), 'up' => array ( 0 => 'class.domxpath.php', 1 => 'DOMXPath', ), 'prev' => array ( 0 => 'domxpath.evaluate.php', 1 => 'DOMXPath::evaluate', ), 'next' => array ( 0 => 'domxpath.registernamespace.php', 1 => 'DOMXPath::registerNamespace', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'fr', 'path' => 'reference/dom/domxpath/query.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
DOMXPath::query — Évalue l'expression XPath donnée
$expression
, ?DOMNode $contextNode
= null
, bool $registerNodeNS
= true
): mixed
Évalue l'expression expression
XPath donnée.
expression
L'expression XPath à exécuter.
contextNode
Le paramètre optionnel contextNode
peut être spécifié
pour effectuer des requêtes XPath relative. Par défaut, les requêtes sont relatives
à l'élément racine.
registerNodeNS
Indique s'il faut automatiquement enregistrer les préfixes de namespace en vigueur du nœud de contexte dans l'objet DOMXPath. Cela peut être utilisé pour éviter d'avoir à appeler manuellement DOMXPath::registerNamespace() pour chaque namespace en vigueur. En cas de conflit de préfixes de namespace, seul le préfixe de namespace descendant le plus proche est enregistré.
Retourne un DOMNodeList contenant tous les nœuds
correspondant à l'expression expression
XPath donnée.
Toutes les expressions qui ne retournent pas de nœud retourneront
un DOMNodeList vide.
Si le paramètre expression
est malformé ou
le paramètre contextNode
est invalide,
DOMXPath::query() retournera false
.
Exemple #1 Récupération de tous les livres anglais
<?php
$doc = new DOMDocument;
// Nous ne voulons pas nous soucier des espaces blancs
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Nous commençons à l'élément racine
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo "Livre trouvé {$entry->previousSibling->previousSibling->nodeValue}," .
" par {$entry->previousSibling->nodeValue}\n";
}
?>
L'exemple ci-dessus va afficher :
Livre trouvé : The Grapes of Wrath, par John Steinbeck Livre trouvé : The Pearl, par John Steinbeck
Nous pouvons également utiliser le paramètre contextNode
pour raccourcir notre expression :
<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// notre requête est relative au nœud tbody
$query = 'row/entry[. = "en"]';
$entries = $xpath->query($query, $tbody);
foreach ($entries as $entry) {
echo "Livre trouvé : {$entry->previousSibling->previousSibling->nodeValue}," .
" par {$entry->previousSibling->nodeValue}\n";
}
?>