DOMXPath::query

(PHP 5, PHP 7, PHP 8)

DOMXPath::query Выполняет заданное выражение XPath

Описание

public DOMXPath::query(string $expression, ?DOMNode $contextNode = null, bool $registerNodeNS = true): mixed

Выполняет заданное XPath-выражение expression.

Список параметров

expression

Выражение XPath для выполнения.

contextNode

Дополнительный параметр contextNode может быть указан для выполнения относительных запросов XPath. По умолчанию запросы выполняются относительно корневого элемента.

registerNodeNS

Нужно ли автоматически регистрировать префиксы пространства имён в области видимости контекстного узла для объекта DOMXPath. Параметр помогает избегать ручного вызова метода DOMXPath::registerNamespace() для каждого пространства имён в области видимости. Когда префиксы пространства имён конфликтуют, регистрируется только префикс пространства имён близлежащего потомка.

Возвращаемые значения

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