Xpath

XPath简介

 

XPath一套语法规则,用语定义XML文档的各个部分。


什么是XPath?

  • XPath是定义XML文档各部分的语法
  • XPath使用路径定义XML元素
  • XPath定义了一个标准函数库
  • XPath是XSLT的一个主要元素
  • XPath不是用XML书写的
  • XPath是一个W3C标准

类似传统的文件路径

XPath使用路径表达式识别XML文档里的节点。这些路径表达式看起来很象计算机的文件系统:

w3schools/xpath/session1.htm


XPath示例

看下面的一个简单XML文档:

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

            <catalog>

            <cd country="USA">

            <title>Empire Burlesque</title>

            <artist>Bob Dylan</artist>

            <price>10.90</price>

            </cd>

            <cd country="UK">

            <title>Hide your heart</title>

            <artist>Bonnie Tyler</artist>

            <price>9.90</price>

            </cd>

            <cd country="USA">

            <title>Greatest Hits</title> 

            <artist>Dolly Parton</artist> 

            <price>9.90</price> 

            </cd>

            </catalog>

下面的XPath表达式选择根元素catalog:

/catalog

下面的XPath表达式选择catalog元素的所有cd元素:

/catalog/cd

下面的XPath表达式选择catalog元素下所有cd元素的所有price元素:

/catalog/cd/price

注意: 如果路径以一个斜线(/)开始,代表相对于一个元素的绝对路径!


XPath定义了一个标准函数库

XPath定义了一个标准函数库,用于字符串、数字和布尔表达式。

下面的XPath表达式选择price大于10.80的所有cd元素:

/catalog/cd[price>10.80]



XPath被用于XSLY

XPath是XSLT的一个主要元素。没有XPath知识,我们将无法建立一个XSLT文档。


XPath是一个W3C标准

XPath作为一个寻址XML文档各部分的语言,于1999年11月16日作为W3C推荐标准发布。

XPath被设计用于XSLT、XPointer和其它XML解析软件。

更多的XML和XSL标准,请参考http://www.w3cschools.com。

XPath语法


XPath使用路径表达式定位XML文档内的节点。


XML示例文档

我们将使用如下的简单XML文档描述XPath语法:

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

            <catalog>

            <cd country="USA">

            <title>Empire Burlesque</title>

            <artist>Bob Dylan</artist>

            <price>10.90</price>

            </cd>

            <cd country="UK">

            <title>Hide your heart</title>

            <artist>Bonnie Tyler</artist>

            <price>9.90</price>

            </cd>

            <cd country="USA">

            <title>Greatest Hits</title> 

            <artist>Dolly Parton</artist> 

            <price>9.90</price> 

            </cd>

            </catalog>


定位节点

XML文档可以看作是一个节点树(非常类似于计算机的树形文件夹)。

XPath使用模式表达式识别XML文档里的节点。一个XPath模式是一个以斜线分隔的子元素名列表,用于描述XML文档的一个路径。模式选择匹配该路径的元素。

下面的XPath表达式选择catalog元素的所有cd元素的所有price元素:

/catalog/cd/price

注意: 如果路径以一个斜线(/)开始,代表相对于一个元素的绝对路径

注意: 如果路径以两个斜线开始,表示选择文档中所有符合该条件的元素(即使它们在不同的XML树的级别)!

下面的XPath表达式选择文档中所有的cd元素:

//cd



选择未知元素

通配符(*)用来选择未知XML元素。

下面的XPath表达式选择catalog元素下所有cd元素的所有子元素:

/catalog/cdprice

下面的XPath表达式选择有两个祖先的所有price元素:

price

下面的XPath表达式选择文档中所有元素:

/child::price

选择当前节点的孙子节点中所有price元素

/选择文档根


预测

一个预测过滤一个节点集为一个新的节点集。预测放在方括号([])中。

示例

示例 结果
child::price[price=9.90]选择当前节点的子节点中price元素等于9.90的所有价格元素
child::cd[position()=1]选择当前节点的第一个cd子元素
child::cd[position()=last()]选择当前节点的最后一个cd子元素
child::cd[position()=last()-1]选择当前节点的倒第二个cd元素
child::cd[position()<6]选择当前节点的前五个cd元素
/descendant::cd[position()=7]选择文档中第七个cd元素
child::cd[attribute::type="classic"]选择当前节点的所有type属性等于classic的cd子节点


定位路径缩写语法

定位路径可以用缩写表示。

最重要的缩写为:child::可以从一个定位步骤中省略。

缩写 含义 示例
nonechild::cd是child::cd的简写
@attribute:: cd[@type="classic"]是child::cd[attribute::type="classic"]的简写
.self::node() .//cd是self::node()/descendant-or-self::node()/child::cd的简写
..parent::node()

../cd是parent::node()/child::cd的简写

///descendant-or-self::node()///cd是/descendant-or-self::node()/child::cd的简写

示例

示例 结果
cd选择当前节点的子节点中所有cd元素
*选择当前节点的所有子元素
text()选择当前节点的子节点中所有文本节点
@src选择当前节点的所有src属性
@*选择当前节点的所有属性
cd[1]选择当前节点的第一个cd子节点
cd[last()]选择当前节点的最后一个cd子节点
*/cd选择当前节点的所有cd孙子节点
/book/chapter[3]/para[1]选择book节点的第三个chapter子节点的第一个para子节点
//cd选择所有文档根的所有cd元素后代,因而在同一个文档选择所有的cd元素作为当前节点
.选择当前节点
.//cd选择当前节点的cd元素后代
..选择当前节点的父亲节点
../@src选择当前节点的父节点的src属性
cd[@type="classic"]选择当前节点的子节点中type属性等于classic的所有cd子节点
cd[@type="classic"][5]选择当前节点的子节点中type属性等于classic的cd子节点中第五个节点
cd[5][@type="classic"]选择当前节点的第五个cd子节点,如果该子节点的type属性等于classic
cd[@type and @country]选择当前节点的子节点中由type和country两个属性的所有cd子节点

XPath表达式


XPath支持数值、布尔表达式。


数值表达式

数值表达式用于执行对数字的算术运算。

操作符 描述 示例 结果
+6 + 410
-6 - 42
*

6 * 4

24
div8 div 42
mod取模5 mod 21

注意: XPath在执行算术表达式前总是将每个操作数转换为一个数字。

 


布尔表达式

布尔表达式用于比较两个值。

Operator Description 示例 结果
=Like (equal)price=9.80真(如果price=9.80)
!=Not like (not equal)price!=9.80
<小于price<9.80假(如果price=9.80)
<=小于等于price<=9.80
>大于price>9.80
>=大于等于price>=9.80
orprice=9.80 or price=9.70真(如果price等于9.80)
andprice<=9.80 and price=9.70

 



XPath函数


XPath包含转换数据的函数库。


XPath函数库

XPath函数库包含一套用于转换和替换数据的核心函数。


节点集函数

函数名 描述
count()返回被选择的元素的数目
id()通过元素的唯一ID选择元素
last()返回最后最后一个节点式第几个节点(等同于总共有几个节点)
local-name()返回节点集中第一节点的local name
name()返回元素的名称
namespace-uri()返回节点集中第一个节点的命名空间的URI
position()返回是第几个节点

字符串函数

函数名 描述 示例和结果
concat()将参数字符串连接后返回concat('The',' ','XML')

结果: 'The XML'

contains()如果第一个字符串包含第二个字符串,则返回真,否则返回假

contains('XML','X')

结果: true

normalize-space()将字符串中前后空格删除后返回normalize-space(' The XML')

结果: 'The XML'

starts-with()如果第一个字符串以第二个字符串开头则返回真,否则返回假starts-with('XML','X')

结果: true

string()将一个对象转换为字符串后返回string(3.14)

结果: '3,14'

string-length()返回一个字符串的长度string-length('Beatles')

结果: 7

substring()从字符串的某个偏移位置开始返回指定长度的字符串substring('Beatles',1,4)

结果: 'Beat'

substring-after()返回字符串中从开始到某一字符串第一次出现的位置后的字符串

substring-after('12/10','/')

结果: '10'

substring-before()返回字符串中从开始到某一字符串第一次出现的位置前的字符串substring-before('12/10','/')

结果: '12'

translate()替换一个字符串中字符translate('12:30',':','!')

结果: '12!30'

数值函数

函数名 描述 示例 & 结果
ceiling()返回不小于参数的最小整数ceiling(3.14)

结果: 4

floor()返回不大于参数的最大整数

floor(3.14)

结果: 3

number()转换参数为一个数字

number(price)

round()对参数四舍五入round(3.14)

结果: 3

sum()返回所有参数的和sum(/cd/price)

布尔函数

函数名 描述 示例 & 结果
boolean()将参数转换为布尔值 
false()返回假number(false())

结果: 0

not()如果参数是假,则返回真,否则返回假not(false())
true()返回真

number(true())

结果: 1


XPath示例


我们使用CD目录这样一个XML文档来阐述一些XPath示例。


CD目录

 

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

            <catalog>

            <cd>

            <title>Empire Burlesque</title>

            <artist>Bob Dylan</artist>

            <country>USA</country>

            <company>Columbia</company>

            <price>10.90</price>

            <year>1985</year>

            </cd>

            <cd>

            <title>Hide your heart</title>

            <artist>Bonnie Tyler</artist>

            <country>UK</country>

            <company>CBS Records</company>

            <price>9.90</price>

            <year>1988</year>

            </cd>

            .

            .

            .

            .

            </catalog>   

在IE6下查看cd目录XML文档cdcatalog.xml


选择节点

我们将演示怎样使用selectNodes函数在XML文档中选择节点。这个函数使用一个定位路径作为参数:

xmlobject.selectNodes(XPath expression_r)


选择cd节点

下面的示例选择cd目录中所有的cd节点:

xmlDoc.selectNodes("/catalog/cd") 

自我测试。


选择第一个cd节点

 

xmlDoc.selectNodes("/catalog/cd[1]")

自我测试。


选择price节点

 

xmlDoc.selectNodes("/catalog/cd/price") 

自我测试。


选择price的文本节点

 

xmlDoc.selectNodes("/catalog/cd/price/text()") 

自我测试。


选择价格大于10.80的cd节点

 

xmlDoc.selectNodes("/catalog/cd[price>10.80]") 

自我测试。


选择价格大于10.80的price节点

 

xmlDoc.selectNodes("/catalog/cd[price>10.80]/price") 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值