XML学习笔记 4. xpath

Xpath 是W3C制定的用来在XML文档中进行导航和查询的路径表达语句,可以在XML文档层次结构中的相关元素节点及内容进行检索和定位。


xpath的绝对路径为/step1/step2,相对路径为step1/step2/step3 .

xpath是有 / 和step组成,/表示进行下一步的step的开始,而step表示按照当前/提供的路径进行的寻找操作。

step由三个部分组成: 轴坐标符:: 节点测试 【判定谓词】

轴坐标符 AxisSpecifier 表示从当前路径向什么方向进行寻找。:共有13种:

1.ancestor 查找当前路径节点的所有祖先节点

2.ancestor-or-self 查找所有祖先节点和自己

3. attribute 查找当前节点的属性

4:child 查找所有子节点

5. descendant 查找所有后代节点

6.descendant-or-self 查找所有后代节点加自己

7.following 查找当前节点之后的所有节点,之后的节点是指节点的开始标记在当前节点的结束标记之后的节点。

8.following-sibling 查找之后的兄弟节点

9.namespace 查找节点的命名空间

10.parent 当前节点的父节点

11.preceding 当前节点之前的所有节点

12.preceding-sibling 当前节点之前的兄弟节点

13.self 节点自己。


节点测试 NodeTest 对节点进行或名称类型测试,取对应要求名称或类型的节点

//node() 是查找容易节点 //book 是查找容易名字叫book‘的节点


判定谓词 Predicate 使用[]包含,可以调用一些函数来判断是否符合一定的要求

其中一般调用函数来进行判断,常用的函数如下:

string()将内容转换为字符串

string-length()返回字符串长度或者当前节点的字符串长度

contains(string1,string2)判断string1中是否含有string2

starts-with(string1,string2) string1是否以string2为开头

ends-with(string1,string2) string1是否以string2为结尾

matches(string,pattern) string是否匹配对应的正则表达式

name() 返回当前节点的名称

local-name() 返回当前节点的名称 不带命名空间

root() 返回文档节点即根节点

empty() 判断是否为空

exists() 判断是否存在

cout(....) 返回节点的数量

avg(),max(),min(),sum() 分别是 取 属 性 的平均值,最大值,最小值和 和。

position() 返回节点的位置 /book[3]这里是缩写,其实是[position()=3]的判定。position()是从1开始计数的。

last() 返回当前处理的节点序列的数量 //book[last()] 为返回最后一个book


xpath中的一些常用缩写:

无 表示默认的child::寻找子节点

@ 表示attribute::

. 表示self::node()即当前节点

.. 表示parent::node()即父节点

// 表示/descend-or self::node()/即所有子孙节点和自己的子节点



作业中的几个实例:

1.查找所有非最外层的section元素:

//section//section
/descendant-or-self::node()/section/descendant-or-self::node()/section
/descendant-or-self::node()/section//section


2.查找只包含三个子孙section元素(包括所有后代section)的section元素;

//section[count(descendant::section)=3]
//section[count(descendant-or-self::section)=4]

3.查找出id属性为intro,title元素中包含字符串“Web”的section元素的父节点。
//section[@id="intro"][matches(./title/text(),"Web")]/parent::*
//section[@id="intro"]/title[matches(text(),"Web")]/parent::*/parent::*
/descendant-or-self::node()/section[@id="intro"][matches(./title/text(),"Web")]/parent::*

相关文章

引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满足人的生产生活需要而产生的。具体...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满...
(点击上方公众号,可快速关注) 公众号:smart_android 作者:耿广龙|loonggg 点击“阅读原文”,可查看...
一、xml与xslt 相信所有人对xml都不陌生,其被广泛的应用于数据数据传输、保存与序列化中,是一种极为强...