DOMXPath::query - Выполняет заданное XPath выражение
Вернуться к: DOMXPath
DOMXPath::query
(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";
}
?>
Смотрите также
- DOMXPath::evaluate() - Вычисляет переданное XPath выражение и возвращает типизированный результат, если возможно
Вернуться к: DOMXPath