- 浏览: 158134 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
beee:
不错,顶啊
删除项目中的所有.svn文件夹(或CVS文件夹) -
Ts_Coo:
java socket编程入门 -
Jiangnan-Xia:
大哥果然相当凑活
删除项目中的所有.svn文件夹(或CVS文件夹) -
yangzhiqi463:
相当凑活
删除项目中的所有.svn文件夹(或CVS文件夹) -
卢水发:
你这东西太给力
删除项目中的所有.svn文件夹(或CVS文件夹)
XPath
数据类型
XPath
可分为四种数据类型:
节点集(node-set)
节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。
布尔值(boolean)
由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和 false两个值。布尔值可以和数值类型、字符串类型相互转换。
字符串(string)
字符串即包含一系列字符的集合,XPath
中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。
数值(number)
在XPath
中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特
殊描述,如非数值NaN(Not-a-Number)、正无穷大
infinity、负无穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。
其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。
XPath
节点类型
由于XPath
包含的是对文档结构树的一系列操作,因此搞清楚XPath
节点类型也是很必要的。在XML文档的逻辑结构,一个 XML文件可以包含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath
中,将节点划分为七种节点类型:
根节点(Root Node)
根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。
元素节点(Element Nodes)
元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。
文本节点(Text Nodes)
文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。
属性节点(Attribute Nodes)
每一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节
点可以匹配出元素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。
对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为 #IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。
此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一种类型的节点。
命名空间节点(Namespace Nodes)
每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留属性声明的,因此,在XPath
中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。
处理指令节点(Processing Instruction Nodes)
处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。
注释节点(Comment Nodes)
注释节点对应于文档中的注释。
一个XML文档树
我们来构造一棵XML文档树,作为后面举例的依托:
- <A id= "a1" >
- <B id="b1" >
- <C id="c1" >
- <B name="b" />
- <D id="d1" />
- <E id="e1" />
- <E id="e2" />
- </C>
- </B>
- <B id="b2" />
- <C id="c2" >
- <B/>
- <D id="d2" />
- <F/>
- </C>
- <E/>
- </A>
<A id="a1"> <B id="b1"> <C id="c1"> <B name="b"/> <D id="d1"/> <E id="e1"/> <E id="e2"/> </C> </B> <B id="b2"/> <C id="c2"> <B/> <D id="d2"/> <F/> </C> <E/> </A>
以下将要介绍一些XPath
中节点匹配的基本方法。
路径匹配
路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:
(1)用“/”指示节点路径
如“/A/C/D” 表示节点"A"的子节点"C"的子节点"D",即id值为d2的D节点, “/”表示根节点。
(2)用“//” 表示所有路径以"//"后指定的子路径结尾的元素
如“//E” 表示所有E元素,结果是所有三个E元素,如“//C/E”表示所有父节点为C的E元素,结果是id值为e1和e2的两个E元素 。
(3)用“*” 表示路径的通配符
如“/A/B/C/*”表示 A元素→B元素→C元素下的所有子元素,即name值为b的B元素、 id值为d1的D元素和id值为e1和e2的两个E元素
“/*/*/D”表示上面有两级节点的D元素,匹配结果是id值为d2的D元素 ,如“//*”表示所有的元素。
位置匹配
对于每一个元素,它的各个子元素是有序的。
如:/A/B/C[1]表示A元素→B元素→C元素的第一个子元素,得到name值为b的B元素
/A/B/C[last()]表示A元素→B元素→C元素的最后一个子元素,得到id值为e2的E元素
/A/B/C[position()>1]表示A元素→B元素→C元素之下的位置号大于1的元素,得到id值为d1的D元素和两个具有id值的E元素
属性及属性值
在XPath
中可以利用属性及属性值来匹配元素,要注意的是,元素的属性名前要有"@"前缀。例如:
//B[@id]表示所有具有属性id的B元素,结果为id值为b1和b2的两个B元素
//B[@*]表示所有具有属性的B元素,结果为两个具有id属性的B元素和一个具有name属性B元素
//B[not(@*)]表示所有不具有属性的B元素,结果为A元素→C元素下的B元素
//B[@id="b1"] id值为b1的B元素,结果为A元素下的B元素
亲属关系匹配
XML文档可归结为树型结构,因此任何一个节点都不是孤立的。通常我们把节点之间的归属关系归结为一种亲属关系,如父亲、孩子、祖先、后代、兄弟等等。在对元素进行匹配时,同样可以用到这些概念。例如:
//E/parent::* 表示所有E节点的父节点元素,结果为id值为a1的A元素和id值为c1的C元素
//F/ancestor::* 表示所有F元素的祖先节点元素,结果为id值为a1的A元素和id值为c2的C元素
/A/child::* 表示A的子元素,结果为id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素
/A/descendant::* 表示A的所有后代元素,结果为除A元素以外的所有其它元素
//F/self::* 表示所有F的自身元素,结果为F元素本身
//F/ancestor-or-self::* 表示所有F元素及它的祖先节点元素,结果为F元素、F元素的父节点C元素和A元素
/A/C/descendant-or-self::* 表示所有A元素→C元素及它们的后代元素,结果为id值为c2的C元素、该元素的子元素B、D、F元素
/A/C/following-sibling::* 表示A元素→C元素的紧邻的后序所有兄弟节点元素,结果为没有任何属性的E元素
/A/C/preceding-sibling::* 表示A元素→C元素的紧邻的前面所有兄弟节点元素,结果为id值为b1和b2的两个B元素
/A/B/C/following::* 表示A元素→B元素→C元素的后序的所有元素,结果为id 为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、无属性的E元素。
/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元素
条件匹配
条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。例如last()、position()等等,这里我们就不再赘述。
以上这些匹配方法中,用得最多的还要数路径匹配。在上一章样式表的例子中,无论是在语句<xsl:template
match="学生花名册">中,还是在语句 <xsl:value-of
select="名字"/>中,都是依靠给出相对于当前路径的子路径来定位节点的。
这里面是xpath
的一些详细介绍和用法:
http://msdn.microsoft.com/en-us/library/ms256115(VS.85).aspx
以上属在下整理以方便需要的朋友学习,有错误的地方请指出,谢谢!
发表评论
-
java keytool证书工具使用小结
2013-12-24 10:05 797Keytool 是一个Java数据证 ... -
Jboss6.0修改端口及windows平台下的安装
2013-12-12 20:04 842jboss下载地址: http://www.jboss.or ... -
java 获取文件的方式
2010-09-29 10:51 917首先,Java中的getResourceAsStream有 ... -
log4j 输出格式详解
2010-09-28 13:34 1978Log4j建议只使用四个级别,优先级从高到低分别是ERRO ... -
Hibernate读写Oracle BLOB
2010-09-26 14:41 1042CREATE TABLE TUSER( ID V ... -
Hibernate的generator属性的意义
2010-09-26 11:06 877本文讲述Hibernate的generator属性的意义。 ... -
Duplicate class/entity mapping错
2010-09-26 10:05 1202是因为hibernate-mapping中没有定义pac ... -
Java字符编码相关
2010-05-20 11:11 5437JVM启动后,JVM会设置一些系统属性以表明JV ... -
svn管理分支(转)
2010-04-21 17:45 1711转自(http://jasonchi.iteye.com/bl ... -
SVN trunk, branches and tag
2010-04-21 17:25 1730翻译者:zwws原 文: SVN trunk, branc ... -
JAXB for simple Java-XML serialization
2010-01-12 13:55 1834There're a number of way to do ... -
java导入导出excel操作(jxl)
2009-08-26 11:22 1188jxl.jar 包 下载地址: http://w ... -
Log4j配置文件
2009-08-04 15:11 1810b.log4j.properties ,为log4 ... -
Cron 表达式
2009-06-05 17:16 929Field Name ... -
java 定时任务
2009-06-05 16:42 1316用 Quartz 进行作业调度 ... -
程序形成死锁的四个条件
2009-05-12 15:02 858死锁的条件 互斥条件(Mutual exclusion):资源 ... -
介绍一个调试监测TCP链接的好工具
2009-02-26 10:31 2029最近在写WebService程序和Socket编程,将一个不错 ... -
java虚拟机垃圾回收机制
2009-01-05 12:00 2698一、相关概念 基本回收算法 引用计数(Reference C ... -
java application中内嵌ActiveX控件
2009-01-05 09:53 3395我这里用的是SWT/JFace开发applicati ... -
用脚本运行java GUI程序
2009-01-05 09:50 1866做了一段时间的java GUI编程,现在把一些心得写出来大家共 ...
相关推荐
NULL 博文链接:https://huibin.iteye.com/blog/902913
非常详细的XPath教程,XPath 表达式使用路径表示法(与 URL 中使用的路径表示法类似)寻址 XML 文档的各个部分。表达式计算为生成子元素集、布尔值、数字或字符串类型的对象。
xpath表达式测试小工具,很实用。推荐。上次不知道为什么被删掉了。重发。
xpath表达式完整实例,包括各种符号,如斜杠、双斜杠、点符号、星号等,还包括各种谓语条件 如class、id、last、position、大于、小于等,以及各种通配符示例。
xpath表达式的基本格式,应用实例等等
xpath表达式 1. xpath语法 <title lang=eng>Harry Potter</title> <price>999 <title lang=eng>Learning XML</title> <price>888 1.1 选取节点 XPath 使用路径表达式来选取 ...
xpath表达式说明。。。。。。。。。。。。。。。。。。。。
软X路径SoftXPath是一个小型的跨浏览器 JavaScript 库,用于使用强大的Xpath表达式在客户端解析复杂的 XML 文档。 专注于构建有效的 Xpath 表达式,而不是在浏览器兼容性问题上浪费时间。支持的浏览器:SoftXPath ...
基于framework 3.5的对正则表达式和xpath测试的小工具
XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多。如果需要从 XML 文档中提取信息,最快捷、最简单的办法就是在 Java:trade_mark: 程序中嵌入 XPath 表达式。Java 5 推出了 javax.xml.xpath 包,这...
Hali是一个开源,轻量级的现代JavaScript实用程序,用于评估在TypeScript之上构建的XPath表达式。 该工具是专为Web抓取而设计的,可以集成到新的或现有的Web搜寻器中。 安装 # using NPM npm i @remotemerge/hali #...
CssSelector组件CssSelector组件将CSS选择器转换为XPath表达式。 资源文档贡献报告问题,并在Symfony主存储库中发送拉取请求CssSelector组件CssSelector组件将CSS选择器转换为XPath表达式。 资源文档贡献报告问题,...
relative-xpath-helper 此chrome扩展程序将为您提供一个元素相对于另一个元素的相对xpath表达式
CssSelector组件CssSelector组件将CSS选择器转换为XPath表达式。资源资源并在学分该组件是Python cssselect库的端口,该库以BSD许可证分发。
该插件已被取代,该可以完成format插件所做的一切,等等。 我建议您尝试一下jaxb-... 存储库中提供了一个使用XPath表达式作为格式引擎的构建器的示例格式化程序类,该存储库使用apache 项目的一个分支,使用实际XML名
XPath诞生于1999年,作为对XSLT和XPointer语言的补充,但近来已成为流行的独立语言,因为单个XPath表达式可用于替代多行DOM API代码。 使用XPath的目的:为了在匹配XML文档结构时能够准确地找到某一个节点元素。...
XPath诞生于1999年,作为对XSLT和XPointer语言的补充,但近来已成为流行的独立语言,因为单个XPath表达式可用于替代多行DOM API代码。 使用XPath的目的:为了在匹配XML文档结构时能够准确地找到某一个节点元素。...