array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), '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' => 'ru', '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 — Выполняет заданное выражение XPath
$expression
, ?DOMNode $contextNode
= null
, bool $registerNodeNS
= true
): mixed
Выполняет заданное XPath-выражение expression
.
expression
Выражение XPath для выполнения.
contextNode
Дополнительный параметр contextNode
может быть
указан для выполнения относительных запросов XPath. По
умолчанию запросы выполняются относительно корневого элемента.
registerNodeNS
Нужно ли автоматически регистрировать префиксы пространства имён в области видимости контекстного узла для объекта DOMXPath. Параметр помогает избегать ручного вызова метода DOMXPath::registerNamespace() для каждого пространства имён в области видимости. Когда префиксы пространства имён конфликтуют, регистрируется только префикс пространства имён близлежащего потомка.
Возвращает объект DOMNodeList, содержащий узлы,
соответствующие выражению XPath expression
.
Любое выражение, не возвращающее узлы, вернёт пустой объект
DOMNodeList.
Если expression
построено
неправильно или contextNode
имеет неверное значение,
DOMXPath::query() вернёт false
.
Пример #1 Получение списка всех книг на английском
<?php
$doc = new DOMDocument;
// Не хотим возиться с пробелами
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
// Начинаем с корневого элемента
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo "Найдена книга {$entry->previousSibling->previousSibling->nodeValue}," .
" автор {$entry->previousSibling->nodeValue}\n";
}
?>
Результат выполнения приведённого примера:
Найдена книга The Grapes of Wrath, автор John Steinbeck Найдена книга The Pearl, автор John Steinbeck
Можно также использовать параметр contextNode
для более короткой записи выражения:
<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->load('book.xml');
$xpath = new DOMXPath($doc);
$tbody = $doc->getElementsByTagName('tbody')->item(0);
// запрос относительно узла tbody
$query = 'row/entry[. = "en"]';
$entries = $xpath->query($query, $tbody);
foreach ($entries as $entry) {
echo "Найдена книга {$entry->previousSibling->previousSibling->nodeValue}," .
" автор {$entry->previousSibling->nodeValue}\n";
}
?>