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 и возвращает типизированный результат, если возможно