(PHP 5, PHP 7)
DOMXPath::query — Выполняет заданное XPath выражение
$expression
[, DOMNode $contextnode
[, bool $registerNodeNS
= true
]] )
Выполняет заданный 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";
}
?>