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


(PHP 5)

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