DOMXPath::query

(PHP 5, PHP 7)

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

Описание

public DOMNodeList DOMXPath::query ( string $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 и возвращает типизированный результат, если возможно