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 />'; }
运行结果: