xpath
来源:互联网 发布:自助牛排知乎 编辑:程序博客网 时间:2024/05/23 16:13
转载: http://www.cnblogs.com/skyblue/archive/2008/06/19/900187.html
定位节点
XML文档可以看作是一个节点树(非常类似于计算机的树形文件夹)。
XPath使用模式表达式识别XML文档里的节点。一个XPath模式是一个以斜线分隔的子元素名列表,用于描述XML文档的一个路径。模式选择匹配该路径的元素。
下面的XPath表达式选择catalog元素的所有cd元素的所有price元素:
/catalog/cd/price
注意: 如果路径以一个斜线(/)开始,代表相对于一个元素的绝对路径!
注意: 如果路径以两个斜线开始,表示选择文档中所有符合该条件的元素(即使它们在不同的XML树的级别)!
下面的XPath表达式选择文档中所有的cd元素:
//cd
选择未知元素
通配符(*)用来选择未知XML元素。
下面的XPath表达式选择catalog元素下所有cd元素的所有子元素:
/catalog/cd/*
下面的XPath表达式选择catalog元素的孙子元素下所有的price元素:
/catalog/*/price
下面的XPath表达式选择有两个祖先的所有price元素:
/*/*/price
下面的XPath表达式选择文档中所有元素:
//*
选择分支
通过在XPath表达式中使用方括号可以进一步地指定一个元素。
下面的XPath表达式选择catalog元素的第一个cd子元素:
/catalog/cd[1]
下面的XPath表达式选择catalog元素的最后一个子元素(注意:没有first()函数):
/catalog/cd[last()]
下面的XPath表达式选择catalog元素下含有price子元素的所有cd元素:
/catalog/cd[price]
下面的XPath表达式选择catalog元素下子元素price值等于10.90的所有cd元素:
/catalog/cd[price=10.90]
下面的XPath表达式选择catalog元素下price元素值等于10.90的所有cd元素的price元素:
/catalog/cd[price=10.90]/price
选择多个路径
通过在XPath表达式中使用|操作符,可以选择多个路径。
下面的XPath表达式选择catalog元素的子元素cd元素下所有的title和artist元素:
/catalog/cd/title | /catalog/cd/artist
下面的XPath表达式选择文档中所有title元素和artist元素:
//title | //artist
下面的XPath表达式选择文档中所有title、artist、price元素:
//title | //artist | //price
下面的XPath表达式选择catalog元素的cd子元素下所有的title元素,以及文档中所有的artist元素:
/catalog/cd/title | //artist
选择属性
在XPath中,所有属性以前缀@指定。
下面的XPath表达式选择所有名为country的属性:
//@country
下面的XPath表达式选择所有含有country属性的cd元素:
//cd[@country]
下面的XPath表达式选择选择所有含有任何属性的cd元素:
//cd[@*]
下面的XPath表达式选择属性country等于UK的所有cd元素:
//cd[@country='UK']
XPath定位路径
一个定位路径表达式返回一个节点集。
定位路径表达式
一个定位路径可以是绝对的或相对的。
绝对定位路径以一个斜线(/)开头,而相对定位路径没有。两种情况下,定位路径由一个或多个定位步骤组成,每个步骤由一个斜线分隔:
一个绝对定位路径:
/step/step/...
一个相对定位路径:
step/step/...
定位步骤从左到右,依次按顺序计算。每个步骤根据当前节点集的节点计算。如果定位路径是绝对的,那么当前节点集包含根节点。如果定位路径是相对的,那么当前节点集包含使用表达式的节点。定位步骤包括:
- 一个轴(指定当前定位步骤和当前节点选择的节点间的树关系)
- 一个节点测试(指定定位步骤选择的节点的节点类型和扩展名)
- 零或多个预测(使用表达式进一步抽取定位步骤选定的节点集)
一个定位步骤的语法为:
轴名::节点测试[预测]
示例:
child::price[price=9.90]
轴和节点测试
一个轴定义相对于当前节点的节点集。节点测试用于识别轴内的一个节点。我们可以通过名或类型来执行一个节点测试。
轴名描述ancestor包含当前节点的所有祖先节点
注意: 除非当前节点是根节点,否则这个轴始终包括根节点
ancestor-or-self包括当前节点和所有当前节点的祖先节点attribute包含当前节点所有的属性child包含当前节点所有的子节点descendant包含当前节点的所有后代节点
注意:这个轴不包括属性或命名空间节点
descendant-or-self包含当前节点本身和所有它的后代节点following包含文档中当前节点的结束标记后所有节点following-sibling包含当前节点后所有的同层节点注意: 如果当前节点是属性节点或命名空间节点,那么这个轴为空
namespace包含当前节点的所有命名空间节点parent包含当前节点的所有父节点preceding包含文档中当前节点的开始标记之前的所有节点preceding-sibling包含当前节点之前的所有同层节点注意: 如果当前节点是一个属性节点或者命名空间节点,那么这个轴为空
self当前节点本身示例
示例结果child::cd选择当前节点的子节点中所有的cd元素(如果当前节点没有cd子节点,那么将返回一个空节点集)attribute::src选择当前节点的src属性(如果当前节点没有src属性,那么返回一个空节点集)child::*选择当前节点的所有子元素attribute::*选择当前节点的所有属性child::text()选择当前节点的文本节点子节点child::node()选择当前节点的所有子节点descendant::cd选择当前节点的后代中所有cd元素ancestor::cd选择当前节点的祖先节点中所有cd元素ancestor-or-self::cd选择当前节点的祖先节点中所有cd元素,如果当前节点是一个cd元素,那么也包括当前节点child::*/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属性等于classiccd[@type and @country]选择当前节点的子节点中由type和country两个属性的所有cd子节点XPath表达式
XPath支持数值、布尔表达式。
数值表达式
数值表达式用于执行对数字的算术运算。
操作符描述示例结果+加6 + 410-减6 - 42*乘6 * 4
24div除8 div 42mod取模5 mod 21注意: XPath在执行算术表达式前总是将每个操作数转换为一个数字。
布尔表达式
布尔表达式用于比较两个值。
OperatorDescription示例结果=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真or或price=9.80 or price=9.70真(如果price等于9.80)and和price<=9.80 and price=9.70假
XPath函数
XPath包含转换数据的函数库。
XPath函数库
XPath函数库包含一套用于转换和替换数据的核心函数。
节点集函数
函数名描述count()返回被选择的元素的数目id()通过元素的唯一ID选择元素last()返回最后最后一个节点式第几个节点(等同于总共有几个节点)local-name()返回节点集中第一节点的local namename()返回元素的名称namespace-uri()返回节点集中第一个节点的命名空间的URIposition()返回是第几个节点字符串函数
函数名描述示例和结果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)
选择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")
自我测试。
- xpath
- XPATH
- XPATH
- XPATH
- xpath
- XPath
- xPath
- Xpath
- XPath
- XPath
- XPath
- xpath
- Xpath
- xpath
- XPATH
- XPath
- XPath
- xPath
- 输入一个字符串,字符串中含有字母、逗号、空格,实现将输入字符中的逗号,空格号去除,字母分行显示
- 《深入剖析Tomcat 》第3章 连接器(Connector)
- C++经典问题解析
- 一种多线程安全的单例模式
- LeetCode Happy Number 题解
- xpath
- 中央处理器-第三节 时序产生器和控制方式
- 基于sankey图制作的社区变动图
- SimpleDateFormat转换时间,12,24时间格式
- Winform 换皮肤
- 游戏开发
- 《实体解析与信息质量》-2.1.3 两个信息产品的例子
- SVM模型
- Ibatis,Spring整合(注解方式注入)