XPath基础

      最近感觉xml的用处挺大的,特别是在数据交互的时候,比如ajax从后台取的数据,就可以得到一个xml文本,还有在很多框架的配置都是用xml进行配置,所以懂得如何从xml提取所需要的信息很重要,在网上学习了一下XPath,虽然网上都有,但是自己还是想整理一下,留着日后用用到时可以参考一下。

一、什么是XPath

XPath 使用路径表达式在 XML 文档中进行导航,确切的说它是一个标准的路径,根据该路径可以解析出xml文档里面的信息。

二、xml基本语法。

1、xml文档

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

 

2、选取节点

 表达式          功能
nodename  选取此节点的所有节点
/                 从根节点开始选取
//                从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
.                 选取当前节点
..                选取当前节点的父节点
@               选取属性
3、列子
 bookstore             选取bookstore节点的所有节点 
bookstore/book     选取bookstore节点下的所以book节点
//book                    选取所有的book节点,而不管它们在文档中的位置
bookstore//book    选取bookstore节点下的所有book节点
//@lang                  选取属性为lang的节点
3、谓语
/bookstore/book[1]                               选取bookstore下的第一个book节点
/bookstore/book[last()]                         选取bookstore节点下的最后一个book节点
/bookstore/book[position()<3]              选取bookstore节点下的第一和第二个节点
//title[@lang]                                         选取属性为lang的所有title节点
//title[@lang='eng']                               选取属性为lang并且值为eng的所以title节点
/bookstore/book[price<32.00]              选取bookstore下的price<32.00的book节点
/bookstore/book[price>30.00]/title       选取bookstore下的book的price>30.00的title节点
4选取未知节点
*               匹配任何元素节点
@*            匹配任何属性节点
node()      匹配任何类型的节点
5列子
/bookstore/*               选取bookstore元素的所以子元素
//*                               选取文档中的所有元素
//title[@*]                   选取所有带有属性的title元素
6、选取若干路径
//book/title|//book/price              选取 book 元素的所有 title 和 price 元素。
//title|//price
/bookstore/book/title|//price
7、XPath 轴
ancestor                                 选取当前节点的所以先辈节点
ancestor-or-self                     选取当前节点的所有先辈节点及该节点
attribute                                选取当前节点的所以属性
child                                       选取当前节点的所有子元素
descendant                           选取当前节点的所以后代元素
descendant-or-self                选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following                                选取文档中当前节点的结束标签之后的所有节点。
preceding                              选取文档中当前节点的开始标签之前的所有节点。
self                                         选取当前节点
8 、步的语法:
轴名称::节点测试[谓语]
9、例子
child::book                           选取所有属于当前节点的子元素的book节点
attibute::lang                       选取当前节点的lang属性
child::*                                 选取当前节点的所有子节点
attibute::*                            选取当前节点的所以属性
child::text()                           选取当前节点所有文本子节点
child::node()                         选取当前节点的所有子几点
descendant::book                选取当前节点的所有book先辈
ancestor::book                     选取当前节点的所有book父节点
ancestor-or-self::book     
child::*/child::price               选取当前节点的所有孙price节点
10、xpath运算符
预算符             描述              实例                      返回值
|            计算两个节点集    //book|//cd               返回所有拥有 book 和 cd 元素的节点集
+                  加法              5+4                       9
-                   减法              2-1                       1
*                  乘法              2*4                       8
div               除法              8div4                     2
=                 等于              price=9.80                如果 price 是 9.80,则返回 true。如果 price 是 9.90
!=
<
<=
>
>=
or                或           price=9.80 or price=9.50  如果 price 是 9.80,则返回 true。如果 price 是 9.60,则返回 false。
and               与                price>9.00 and price<9.90
mod     计算除法的余数     5 mod 2

三、小结一下

       xpath最大的好处就是可以很容易的从xml文档中提取出所需要的信息,不需要使用for循环从头遍历,要使用xpath语句,必须先创建httpRequest对象,就像ajax一样,缺点就是在不同的浏览器中,有写语法得不到想要的结果,具体的实例见附近。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值