(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
.
Версия | Описание |
---|---|
5.3.3 |
Добавлен аргумент registerNodeNS .
|
Пример #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";
}
?>