[转]XPATH参考

原创 2007年09月29日 21:30:00
1 XPath语法参考 
  2之 所以要引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路 径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点.
  3  不过,由于XPath可应用于不止一个的标准,因此W3C将其独立出来作为XSLT的配套标准颁布,它是XSLT以及我们后面要讲到的XPointer的重要组成部分。
  4
  5  在介绍XPath的匹配规则之前,我们先来看一些有关XPath的基本概念。
  6
  7  首先要说的是XPath数据类型。XPath可分为四种数据类型: 
  8
  9节点集(node-set
 10节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。 
 11布尔值(boolean)
 12由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和false两个值。布尔值可以和数值类型、字符串类型相互转换。 
 13字符串(string)
 14字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。 
 15数值(number)
 16在XPath中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。 
 17  其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。
 18
 19   另外,由于XPath包含的是对文档结构树的一系列操作,因此搞清楚XPath节点类型也是很必要的。回忆一下第二章中讲到的XML文档的逻辑结构,一 个XML文件可以包含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath中,将 节点划分为七种节点类型: 
 20
 21根节点(Root Node)
 22根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。 
 23元素节点(Element Nodes)
 24元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。
 25元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。 
 26文本节点(Text Nodes)
 27文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。 
 28属性节点(Attribute Nodes)
 29每 一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元 素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。
 30对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为#IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。
 31此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一种类型的节点。 
 32命名空间节点(Namespace Nodes)
 33每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留属性声明的,因此,在XPath中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。 
 34处理指令节点(Processing Instruction Nodes)
 35处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。 
 36注释节点(Comment Nodes)
 37注释节点对应于文档中的注释。
 38
 39下面,我们来构造一棵XML文档树,作为后面举例的依托:
 40
 41<A id="a1">
 42  <B id="b1">
 43    <C id="c1">
 44      <B name="b"/>
 45      <D id="d1"/>
 46      <E id="e1"/>
 47      <E id="e2"/>
 48    </C>
 49  </B>
 50  <B id="b2"/>
 51  <C id="c2">
 52    <B/>
 53    <D id="d2"/>
 54    <F/>
 55  </C>
 56  <E/>
 57</A> 
 58
 59现在,我们就来介绍一些XPath中节点匹配的基本方法。 
 60
 61路径匹配
 62路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:
 63符  号 含  义 举  例 匹配结果 
 64/ 指示节点路径 /A/C/D 节点"A"的子节点"C"的子节点"D",即id值为d2的D节点 
 65/ 根节点 
 66// 所有路径以"//"后指定的子路径结尾的元素 //E 所有E元素,结果是所有三个E元素 
 67//C/E 所有父节点为C的E元素,结果是id值为e1和e2的两个E元素 
 68* 路径的通配符 /A/B/C/* A元素→B元素→C元素下的所有子元素,即name值为b的B元素、id值为d1的D元素和id值为e1和e2的两个E元素 
 69/*/
*/D 上面有两级节点的D元素,匹配结果是id值为d2的D元素 
 70//* 所有的元素 
 71| 逻辑或 //B | //C 所有B元素和C元素 
 72
 73
 74
 75
 76位置匹配
 77对于每一个元素,它的各个子元素是有序的。如:
 78
 79举  例 含  义 匹配结果 
 80/A/B/C[1] A元素→B元素→C元素的第一个子元素 name值为b的B元素 
 81/A/B/C[last()] A元素→B元素→C元素的最后一个子元素 id值为e2的E元素 
 82/A/B/C[position()>1] A元素→B元素→C元素之下的位置号大于1的元素 id值为d1的D元素和两个具有id值的E元素 
 83
 84
 85
 86
 87属性及属性
 88在XPath中可以利用属性及属性值来匹配元素,要注意的是,元素的属性名前要有"@"前缀。例如:
 89
 90举  例 含  义 匹配结果 
 91//B[@id] 所有具有属性id的B元素 id值为b1和b2的两个B元素 
 92//B[@*] 所有具有属性的B元素 两个具有id属性的B元素和一个具有name属性B元素 
 93//B[not(@*)] 所有不具有属性的B元素 A元素→C元素下的B元素 
 94//B[@id="b1"] id值为b1的B元素 A元素下的B元素 
 95
 96
 97
 98
 99  
100亲属关系匹配
101XML文档可归结为树型结构,因此任何一个节点都不是孤立的。通常我们把节点之间的归属关系归结为一种亲属关系,如父亲、孩子、祖先、后代、兄弟等等。在对元素进行匹配时,同样可以用到这些概念。例如:
102
103举  例 含  义 匹配结果 
104//E/parent::* 所有E节点的父节点元素 id值为a1的A元素和id值为c1的C元素 
105//F/ancestor::* 所有F元素的祖先节点元素 id值为a1的A元素和id值为c2的C元素 
106/A/child::* A的子元素 id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素 
107/A/descendant::* A的所有后代元素 除A元素以外的所有其它元素 
108//F/self::* 所有F的自身元素 F元素本身 
109//F/ancestor-or-self::* 所有F元素及它的祖先节点元素 F元素、F元素的父节点C元素和A元素 
110/A/C/descendant-or-self::* 所有A元素→C元素及它们的后代元素 id值为c2的C元素、该元素的子元素B、D、F元素 
111/A/C/following-sibling::* A元素→C元素的紧邻的后序所有兄弟节点元素 没有任何属性的E元素 
112/A/C/preceding-sibling::* A元素→C元素的紧邻的前面所有兄弟节点元素 id值为b1和b2的两个B元素 
113/A/B/C/following::* A元素→B元素→C元素的后序的所有元素 id为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、无属性的E元素。 
114/A/C/preceding::* A元素→C元素的前面的所有元素 id为b2的B元素、id为e2的E元素、id为e1的E元素、id为d1的D元素、name为b的B元素、id为c1的C元素、id为b1的B元素 
115
116
117
118
119条件匹配
120条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。例如前面提到的last()、position()等等,这里我们就不再赘述。 
121以上这些匹配方法中,用得最多的还要数路径匹配。
122
123

相关文章推荐

XPath 2.0 程序员参考

  • 2011年11月18日 15:47
  • 54.89MB
  • 下载

XSLT1.0 &amp; XPath1.0 快速参考

  • 2009年09月09日 08:20
  • 155KB
  • 下载

JAXP,sax与dom4j解析xml文档及XPath在文档内容定位中的应用(持续更新,初学者的野路子、参考和想当然,不断学习和专业化)

一、需求:一个基本的学生成绩管理系统,用xml文档模拟数据库,要求能够向数据库实时增删改查学生成绩数据 二、需求分析: 1.需要分层定义和实现,在用户层由用户输入查询信息,在底层做好数据接收,...
  • ghbfgb
  • ghbfgb
  • 2016年04月29日 13:21
  • 1897

把Json转Xml并且用xpath读取xml元素(JAVA)

maven net.sf.json-lib json-lib 2.4 jdk15

[转]pugixml 一个xml解析库 简单快速, 支持XPath表达式, 感谢作者

原文链接http://blog.csdn.net/jdzfjfhnui/article/details/6672532只是简单的翻译了pugixml文档,暂时未翻译XPath部分./*1.对象模型pu...
  • peapon
  • peapon
  • 2014年06月10日 19:51
  • 693

Xml中SelectSingleNode方法中的xpath用法[转]

最常见的XML数据类型有:Element, Attribute,Comment, Text.        Element, 指形如Tom的节点。它可以包括:Element, Text, Com...

(转)XPath 语法

XPath 语法 Previous Page Next Page XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (...
  • laiahu
  • laiahu
  • 2012年03月06日 17:43
  • 312

xml互转Bean,json(dom4j,xpath,Xstream)

简单的总结下

xpath-as3-1.0.1

  • 2017年11月15日 13:08
  • 305KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]XPATH参考
举报原因:
原因补充:

(最多只允许输入30个字)