首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DOMXPath::query

(PHP 5, PHP 7)

DOMXPath :: query - 计算给定的XPath表达式

描述

代码语言:javascript
复制
public DOMNodeList DOMXPath::query ( string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true ]] )

执行给定的XPath expression

参数

expression

要执行的XPath表达式。

contextnode

可选项contextnode可以指定用于执行相对XPath查询。默认情况下,查询是相对于根元素的。

registerNodeNS

可选的registerNodeNS可以被指定来禁用上下文节点的自动登记。

返回值

返回包含与给定XPath匹配的所有节点的DOMNodeList expression。任何不返回节点的表达式都会返回一个空的DOMNodeList。

如果expression格式不正确或者contextnode无效,返回DOMXPath :: query()FALSE

更新日志

描述

5.3.3

registerNodeNS参数已添加。

例子

示例#1获取所有英文书籍

代码语言:javascript
复制
<?php

$doc = new DOMDocument;

// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;

$doc->Load('book.xml');

$xpath = new DOMXPath($doc);

// We starts from the root element
$query = '//book/chapter/para/informaltable/tgroup/tbody/row/entry[. = "en"]';

$entries = $xpath->query($query);

foreach ($entries as $entry) {
    echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
         " by {$entry->previousSibling->nodeValue}\n";
}
?>

上面的例子将输出:

代码语言:javascript
复制
Found The Grapes of Wrath, by John Steinbeck
Found The Pearl, by John Steinbeck

我们也可以使用contextnode参数来缩短我们的表达式:

代码语言:javascript
复制
<?php

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;

$doc->load('book.xml');

$xpath = new DOMXPath($doc);

$tbody = $doc->getElementsByTagName('tbody')->item(0);

// our query is relative to the tbody node
$query = 'row/entry[. = "en"]';

$entries = $xpath->query($query, $tbody);

foreach ($entries as $entry) {
    echo "Found {$entry->previousSibling->previousSibling->nodeValue}," .
         " by {$entry->previousSibling->nodeValue}\n";
}
?>

扫码关注腾讯云开发者

领取腾讯云代金券