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

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