【万能的数据传输格式XML入门教程】八、Xpath查询语言

XML:Xpath查询语言(相当于MySQL:SQL查询语言)

public array SimpleXMLElement::xpath ( string $path )

主要功能:simplexml结合xpath实现数据查询

参数 说明
$path Xpath语言

注:xpath方法是没有办法通过print_r或var_dump进行调试的。

以下实例用到的data.xml:

<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book id="b001">
        <title>西游记</title>
        <price>168.00</price>
        <author>吴承恩</author>
        <publish>中国文学出版社</publish>
    </book>
    <book>
        <title>三国演义</title>
        <price>198.00</price>
        <author>罗贯中</author>
        <publish>三国演义研究学会</publish>
    </book>
    <book>
        <title>水浒传</title>
        <price>99.80</price>
        <author>施耐庵</author>
        <publish>清华出版社</publish>
    </book>
</library>

1. 使用绝对路径来实现数据的查询

基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。

例:如果想查询根元素下的子元素,必须要这样表示

/根元素/子元素

如果来确定Xpath语言查询的是哪个元素呢?

答:最后一个斜杠后面跟着哪个元素,那么这个表达式查询的就是哪个元素。

绝对路径使用技巧:必须从根元素一级一级向下查询,直到要查询的元素

/根元素/子元素/…/要查询的元素...

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、生成simplexml对象
$xml = simplexml_load_file('data.xml');
// 2、使用绝对路径查询data.xml文件中的所有title节点
$data = $xml->xpath('/library/book/title');
foreach($data as $value) {
    echo '图书标题:'.$value.'<hr />';
}

运行结果:

2. 使用相对路径来实现数据的查询

如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
相对路径的使用小技巧://要查询的元素
例://book

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、生成simplexml对象
$xml = simplexml_load_file('data.xml');
// 2、使用xpath方法来实现book节点的查询
$data = $xml->xpath('//book');
// 3、对book元素进行遍历输出
foreach($data as $row) {
    echo $row->title.'<br />';
    echo $row->price.'<br />';
    echo $row->author.'<br />';
    echo $row->publish.'<hr />';
}

运行结果:

3. 使用*星号来实现数据的查询

星号 * 表示选择所有由星号之前的路径所定位的元素

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、生成simplexml对象
$xml = simplexml_load_file('data.xml');
// 2、使用xpath实现数据的查询
$data = $xml->xpath('//book/*');
foreach($data as $value) {
    echo $value.'<hr />';
}

运行结果:

说明:系统运行时,首先生成SimpleXML对象,然后通过Xpath进行查询,把所有book节点下的子元素都保存在数组的索引元素中,第一个满足条件的结果放入索引为0的元素中,第二个满足条件的结果放入索引为1的元素中…

4. 使用方括号[]来实现数据的查询

方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素
//元素[index],默认情况下index索引是从1开始
//元素[last()],获取最后一个满足条件的元素
中括号中除了可以放置元素的索引外,还可以用于存放表达式
//元素[score<60]

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、生成simplexml对象
$xml = simplexml_load_file('data.xml');
// 2、使用xpath实现数据查询
$data = $xml->xpath('//book[price>100]');
foreach($data as $row) {
    echo $row->title.'<hr />';
}

运行结果:

5. 使用@符号来实现数据的查询

在Xpath中,可以使用@符号获取元素的属性

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、生成simplexml对象
$xml = simplexml_load_file('data.xml');
// 2、使用xpath实现数据的查询操作
$data = $xml->xpath('//book[@id]');
foreach($data as $row) {
    echo $row->title.'<hr />';
}

运行结果:

 

posted @ 2016-09-13 20:15  chenjiacheng  阅读(248)  评论(0编辑  收藏  举报