DOMXPath::query
(PHP 5, PHP 7)
DOMXPath::query — Выполняет заданное выражение XPath
Описание
$expression
, DOMNode $contextnode = ?
, bool $registerNodeNS = true
) : DOMNodeList
Выполняет заданное XPath-выражение expression.
Список параметров
-
expression -
Выражение XPath для выполнения.
-
contextnode -
Дополнительный параметр
contextnodeможет быть указан для выполнения относительных запросов XPath. По умолчанию запросы выполняются относительно корневого элемента. -
registerNodeNS -
Дополнительный параметр
registerNodeNSможно указать, чтобы отключить автоматическую регистрацию контекста узла.
Возвращаемые значения
Возвращает объект 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";
}
?>
Смотрите также
- DOMXPath::evaluate() - Вычисляет переданное выражение XPath и возвращает типизированный результат, если возможно