谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。“ [ ] ”
XPath 通配符可用来选取未知的 XML 元素。 " * "
XPATH语法之选取若干路径。 " | "
xpath2.php:
<?php
$dom = new DOMDocument('1.0','utf-8');
$dom->load('bookstore.xml');
//实例化domxpath对象
$xpath = new DOMXPath($dom);
$query = "//book[1]"; //第一本书,注意不是从0开始,而是从1开始
$query = "//book[last()]"; //最后一本
$query = "//book[last()-1]" ;//倒数第二本
$query = "//book[position()<3]";//找到前两个book节点。这些book节点是亲兄弟,可以用position() last()等。
$query = "//title[position() < 2]"; //居然有3个? 原因:在使用last()和position()时,指的是具有相同父元素的亲兄弟节点。
$query = "//title[2]"; //居然一个都没有? 这些title节点不是亲兄弟节点使用last()和position()时会和预计的不一样。
$query = "//book[@category]" ;//具有category属性的book节点
$query = "//book[@category='CHILDREN']"; //具有category属性且值为children的book节点
$query = "//book[price > 35]"; //在book中,找到子节点price的nodeValue > 35 的book节点
$query = "//book[price>35]/title"; //找到price > 35 的book下的title节点
$res = $xpath->query($query);
var_dump($res);
bookstore.xml:
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>