XPath即为XML路径语言,它是一种用来确定XML标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

XPath的需要理解的相关概念:XML的节点,元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及对节点间的关系如:父(Parent),子(Children),兄弟(Sibling),先辈(Ancestor),后代(Descendant)等等。

1)       节点关

节点关系

说明

父节点Parent

每个元素或属性都有一个父节点

子节点Children

元素节点可以有0个、1个或多个子节点

兄弟节点Sibling

父节点相同的节点称之为兄弟节点

祖先节点Ancestor

节点的父节点、父节点的父节点一直到根节点

后代节点Descendant

节点的子节点,子节点的子节点......

                                                                                                                       

2) XPath语法与XPath路径表达式 的相关概念

  • 路径表达式语法
  • 相对/绝对路径
  • 表达式上下文
  • 谓词(筛选表达式)及轴的概念
  • 运算符及特殊字符
  • 常用表达式实例
  • 函数及说明
  • XPath使用路径表达式来访问XML中的节点或节点集,每个XPath表达式总是由一个或多个步(step)组成的,多个步直接使用斜线分隔。

路径表达式语法

1. 路径 = 相对路径 | 绝对路径

2. XPath路径表达式 = 步进表达式 | 相对路径 "/"步进表达式。

3. 步进表达式=轴 节点测试 谓词 (  轴::节点测试[限定谓语]  )

说明:

相对路径与绝对路径

绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。

相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。

表达式上下文(Context):

上下文其实表示一种环境。以明确当前XPath路径表达式处在什么样的环境下执行。例如同样一个路径表达式处在对根节点操作的环境和处在对某一个特定子节点操作的环境下执行所获得的结果可能是完全不一样的。也就是说XPath路径表达式计算结果取决于它所处的上下文。

步进表达式      

轴::节点测试[限定谓语]

每个步都通过了3次筛选,第一次是使用“轴”选择节点方向,第二次使用“节点测试”选取在指定轴方向上的部分节点,第三次则是使用“限定谓语”来对选中的节点进一步过滤。

1)轴:在XPath中,有下面列表中的各种轴

简化写法

说明

ancestor

 

选取当前节点的所有先辈(父、祖父等)节点

ancestor-or-self

 

选取当前节点的所有先辈(父、祖父等)节点以及当前节点本身

attribute

@

选取当前节点的所有属性节点,如果当前节点不是元素节点,则attribute轴方向上的节点集为空

child

省略不写

选取当前节点的所有子节点

descendant

//

选取当前节点的所有后代节点(子、孙等)

descendant-or-self

 

选取当前节点的所有后代节点(子、孙等)以及当前节点本身

following

 

选取文档中当前节点的结束标签之后的所有节点,不会包含当前节点的后代节点和属性节点

following-sibling

 

选取文档中当前节点的结束标签之后的所有兄弟节点

namespace

 

选取当前节点的所有命名空间节点,当前节点不是元素节点,则namespace轴方向上的节点集为空

parent

..

选取当前节点的父节点

preceding

 

选取文档中当前节点的开始标签之前的所有节点,不会包含当前节点的后代节点和属性节点

preceding-sibling

 

选取文档中当前节点的开始标签之前的所有兄弟节点

self

.

选取当前节点

                                                

                                                                                                                      

2)节点测试:节点测试用于从指定轴方向上选取所匹配的特定的节点,在XPath中,常用的节点测试语法如下表所示:

节点测试

说明

nodename

从指定轴方向上选出具有nodename的节点

如child::book选择当前节点的所有book子节点

descendant::book选择当前节点的所有book后代节点(包括book子节点、孙子节点等)

node()

选择指定轴匹配的所有类型的节点

text()

选择指定轴匹配的所有文本类型的节点

如child::text()选择当前节点的所有文本子节点

descendant::text()选择当前节点的所有文本后代节点(包括文本子节点、文本孙子节点等)

comment()

选择指定轴匹配的所有注释节点

processing-instruction

选择指定轴匹配的所有处理指令节点

*

节点测试中的通配符,表示所有,也即不进行过滤

                                                                                                                        

3)限定谓语:每个步中可以接受0个或多个限定谓语,用于进一步过滤所选取的节点集,限定谓语放在方括号中,通常限定谓语返回一个boolean值。看下面的一些例子:

路径表达式

结果

/bookstore/book[1]

选取属于 bookstore 元素的子元素的第一个 book 元素。

/bookstore/book[last()]

选取属于 bookstore 元素的子元素的最后一个 book 元素。

/bookstore/book[last()-1]

选取属于 bookstore 元素的子元素的倒数第二个 book 元素。

/bookstore/book[position()<3]

选取最前面的两个属于 bookstore 元素的子元素的 book 元素。

//title[@lang]

选取所有拥有名为 lang 的属性的 title 元素。

//title[@lang='eng']

选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。

/bookstore/book[price>35.00]

选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。

/bookstore/book[price>35.00]/title

选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

                                                                                                                        

常用运算符及特殊字符

运算符/特殊字符

说明

/

此路径运算符出现在模式开头时,表示应从根节点选择。

//

从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。

.

当前上下文。

..

当前上下文节点父级。

*

通配符;选择所有元素节点与元素名无关。(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数)

@

属性名的前缀。

@*

选择所有属性,与名称无关。

:

命名空间分隔符;将命名空间前缀与元素名或属性名分隔。

( )

括号运算符(优先级最高),强制运算优先级。

[ ]

应用筛选模式(即谓词,包括"过滤表达式"和"轴(向前/向后)")。

[ ]

下标运算符;用于在集合中编制索引。

|

两个节点集合的联合,如://messages/message/to | //messages/message/cc

-

减法。

div,

浮点除法。

and, or

逻辑运算。

mod

求余。

not()

逻辑非

=

等于

!=

不等于

特殊比较运算符

< 或者 &lt;

<= 或者 &lt;=

> 或者 &gt;

>= 或者 &gt;=

需要转义的时候必须使用转义的形式,如在XSLT中,而在XMLDOM的scripting中不需要转义。

                                                                                                                        

XPathDOM

调用XPath的evaluate方法。 返回的对象类型与XPathConstants的类型一致。

XPathFactory xpathFactory=XPathFactory.newInstance();

XPath xpath=xpathFactory.newXPath();

NodeList list=(NodeList)xpath.evaluateexpression,doc,

XPathConstants.NODESET);

XPathConstants 类中的常量,它们是:

XPathConstants.NODESET  -------NodeList
XPathConstants.NODE          -------Node
XPathConstants.STRING      --------String
XPathConstants.BOOLEAN --------boolean
XPathConstants.NUMBER   --------number

当请求 Boolean返回类型时,如果选中了一个或多个节点,则返回 Boolean.TRUE,否则返Boolean.FALSE。String返回类型是从文本节点、注释节点或指令处理节点检索字符数据的便捷方法。当用于元素节点上时,返回子文本节点的值。

PS: XPath的evaluate方法,有很多重载的方法。可以根据实际情况选择。

XpathDOM4J

采用xpath查找需要引入jaxen-xx-xx.jar,否则会报java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常。

1)直接调用document的selectSingleNode或selectNodes方法获取节点对象。

List list=document.selectNodes("/books/book/@show");

参考文档:

http://www.w3school.com.cn/xpath/xpath_intro.asp

http://www.cnblogs.com/fdszlzl/archive/2009/06/02/1494836.html

http://blog.csdn.net/shijinupc/article/details/7655010

http://www.w3.org/TR/xpath20/

http://www.runoob.com/xpath/xpath-tutorial.html

XPath的更多相关文章

  1. XPath <第四篇>

    .Net框架下的System.Xml.XPath命名空间提供了一系列的类,允许你应用XPath数据模式查询和展示XML文档数据. 一.XPath介绍 XPath有七种类型的节点:元素.属性.文本.命名 ...

  2. EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式

    目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...

  3. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  4. 第四篇 Entity Framework Plus 之 Batch Operations

    用 Entity Framework  进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...

  5. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)

    解剖SQLSERVER 第十四篇    Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...

  7. 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)

    解剖SQLSERVER 第四篇  OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...

  8. 深入理解javascript作用域系列第四篇——块作用域

    × 目录 [1]let [2]const [3]try 前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用 ...

  9. 前端工程师技能之photoshop巧用系列第四篇——图片格式

    × 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...

  10. 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

    温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...

随机推荐

  1. (转载)Linux如何编译安装源码包软件

    一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...

  2. Java多线程同步 synchronized 关键字的使用

    代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A, ...

  3. 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification

    在该文章的两大创新点:一个是PReLU,一个是权值初始化的方法.下面我们分别一一来看. PReLU(paramter ReLU) 所谓的PRelu,即在 ReLU激活函数的基础上加入了一个参数,看一个 ...

  4. Lander-Waterman model

    参考: Lander-Waterman Model 这个模型是鸟枪法测序和基因组装的最基本的理论模型,它揭示了测序深度与覆盖度之间的关系. 该模型回答了一个最基本的问题:How many reads ...

  5. LD_LIBRARY_PATH的设定

    LD_LIBRARY_PATH的设定   变量LD_LIBRARY_PATH 是用来在Linux下设置动态链接库(*.so)的查找路径,我们一般情况下都需要在运行一个带有动态链接库的程序是运行 exp ...

  6. Window通过cmd查看端口占用、相应进程、杀死进程

       在windows下启动程序时候经常出现端口占用, 修改本程序端口是一种解决思路,但是更多时候希望直接杀掉占用端口的程序: 一. 查看所有进程占用的端口 在开始-运行-cmd,输入: netsta ...

  7. Elasticsearch5.0.1 + Kibana5.0.1 + IK 5.0.1安装记录

    最近工作需要,开始研究ES,当前ES的最新版本为5.0.1,从之前的2.x的版本号一下升级到5.x,主要是之前Elastic的产品版本号因为收购等原因很乱,ES 2.X版本的和Kibana 4.x版本 ...

  8. C# 中正确实现 IDisposable 接口

    作用 此接口的主要用途是释放非托管资源. 当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存. 但无法预测进行垃圾回收的时间. 另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知 ...

  9. ios基础操作

    ////  main.m  //文件名//  Day2-上课//工程名////  Created by 张开 on 16/1/5.//创建日期及创建人 ////单行注释:可以注释一段代码,起到了解释说 ...

  10. JavaScipt 数据交互

    标准的w3c直接提供了XMLHttpRequest方法,我们主要站在设计的角度来理解,如何设计出低耦合高内聚的代码jquery对Ajax的处理主要体现在对浏览器兼容,数据的处理过滤以及各种事件的封装上 ...