`

Xpath表达式

    博客分类:
  • java
阅读更多

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文档树,作为后面举例的依托:

Java代码
  1. <A id= "a1" >  
  2.    <B id="b1" >  
  3.     <C id="c1" >  
  4.      <B name="b" />  
  5.      <D id="d1" />  
  6.      <E id="e1" />  
  7.      <E id="e2" />  
  8.     </C>  
  9.    </B>  
  10.    <B id="b2" />  
  11.    <C id="c2" >  
  12.     <B/>  
  13.     <D id="d2" />  
  14.     <F/>  
  15.    </C>  
  16.    <E/>  
  17.   </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

以上属在下整理以方便需要的朋友学习,有错误的地方请指出,谢谢!

分享到:
评论

相关推荐

    用XPath 表达式从 XML 文档中提取信息

    XPath表达式是用于定位这些节点的语句,它们允许开发者高效地从复杂的XML数据结构中提取所需信息。 在XML文档中,每个元素、属性和文本都有一个唯一的路径,XPath就是通过这个路径来找到它们。XPath使用路径表达式...

    xpath表达式测试小工具

    这款“XPath表达式测试小工具”显然是为了帮助开发者和XML爱好者更方便地测试和验证XPath表达式的正确性。 在XML文档中,XPath表达式可以用来选取节点集、单个节点、文本值或者布尔值。其基本语法包括路径表达式、...

    Xpath 表达式教程

    XPath表达式的基本构成: 1. **当前上下文**:使用`.`和`/`表示当前节点作为上下文。例如,`./author`会选取当前节点下的所有`&lt;author&gt;`元素。 2. **文档根**:以单个`/`开头的表达式表示从文档根开始选取。例如,`/...

    xpath表达式基本格式

    .XPath 表达式基本格式 XPath 表达式是选择 XML 文件中节点的方法,节点是 XML 文件的最小构成单位,分为 7 种:element(元素节点)、attribute(属性节点)、text (文本节点)、namespace (名称空间节点)、...

    xpath表达式完整实例

    ### Xpath表达式完整实例知识点解析 #### 一、Xpath基本概念 Xpath是一种用于在XML文档中查询和定位节点的语言。它提供了一种简洁有效的方式来选择文档中的元素和属性。 - **节点类型**: - **Element(元素节点...

    Python xpath表达式如何实现数据处理

    xpath表达式 1. xpath语法 &lt;title lang=eng&gt;Harry Potter&lt;/title&gt; &lt;price&gt;999 &lt;title lang=eng&gt;Learning XML&lt;/title&gt; &lt;price&gt;888 1.1 选取节点 XPath 使用路径表达式来选取 ...

    xpath表达式说明

    根据提供的文件信息,我们可以了解到XPath表达式的几个重要知识点: 1.XPath路径表达式的基本概念 XPath使用路径表达式来选取XML文档中的节点或者节点集。基本的XPath表达式包含有nodename,它用于选取所有特定的子...

    表达式验证1.0[正则,xpath测试]

    在"表达式验证1.0"中,开发者可以输入XPath表达式,结合XML样本数据进行测试。工具会返回匹配的节点,方便用户验证查询是否正确。 该工具基于.NET Framework 3.5,这是一个由Microsoft开发的成熟且广泛使用的框架,...

    使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码

    至于XPath表达式,它是通过一系列的路径规则来指定具体的节点或节点集。当与HtmlAgilityPack结合使用时,可以通过XPath表达式来精确地获取我们所需要的数据。 在实际应用中,可以通过WebClient类下载网页数据,然后...

    SoftXpath:SoftXPath 是一个小型的跨浏览器 JavaScript 库,用于使用强大的 Xpath 表达式在客户端解析复杂的 XML 文档。 专注于构建有效的 Xpath 表达式,而不是在浏览器兼容性问题上浪费时间

    软X路径SoftXPath是一个小型的跨浏览器 JavaScript 库,用于使用强大的Xpath表达式在客户端解析复杂的 XML 文档。 专注于构建有效的 Xpath 表达式,而不是在浏览器兼容性问题上浪费时间。支持的浏览器:SoftXPath ...

    XPath路径表达式详解

    "XPath路径表达式详解" XPath 是 W3C 的一个标准,旨在在 XML1.0 或 XML1.1 文档节点树中定位节点。XPath 路径表达式是一种表达式语言,返回值可能是节点、节点集合、原子值或节点和原子值的混合等。XPath2.0 是 ...

    Xpath生成器,自动生成XPATH,C#版

    在本项目“Xpath生成器,自动生成XPATH,C#版”中,开发者提供了一个工具,能够帮助用户快速生成适用于C#编程环境的XPath表达式。 XPath的工作原理是通过路径表达式来选取XML文档中的节点。路径表达式可以理解为...

    css-selector:CssSelector组件将CSS选择器转换为XPath表达式

    **CSS选择器与XPath表达式** 在Web开发中,我们经常需要定位HTML或XML文档中的特定元素,以便进行样式设置、内容操作或者自动化测试。CSS选择器和XPath都是用于这一目的的强大工具。本文将深入探讨CSSSelector组件...

    xpath_helper_2_0_2.rar

    这款插件能够实时显示XPath表达式的匹配结果,使得开发者和数据分析师在处理复杂的网页结构时更加得心应手。 XPath,全称为XML Path Language,是一种在XML文档中查找信息的语言。它通过路径表达式来选取XML文档中...

    relative-xpath-helper:此chrome扩展程序将为您提供一个元素相对于另一个元素的相对xpath表达式

    然而,编写绝对XPath表达式可能会变得复杂且容易出错,尤其是在动态页面和大型项目中。此时,`Relative XPath Helper`这个Chrome扩展程序就显得尤为实用。 该扩展程序的核心功能是提供元素之间的相对XPath表达式,...

    XPath-Helper

    XPath-Helper是一款针对XPath查询的高效工具,特别为谷歌浏览器设计,极大地简化了网页元素的选择和XPath表达式的构建过程。 在网页开发、自动化测试、数据抓取等领域,XPath-Helper扮演着至关重要的角色。通过安装...

    xpath-helper插件

    这款插件能够帮助开发者和网页爬虫工程师快速编写和测试XPath表达式,提高工作效率。 XPath Helper的核心功能: 1. 实时预览:用户在输入XPath表达式后,插件会立即高亮显示匹配的页面元素,直观地呈现查询结果,...

    xpath helper2.rar

    它在版本2.0.2中提供了更稳定和高效的性能,使得开发者能够更便捷地利用XPath表达式来定位和提取所需的数据,尤其在网页抓取(爬虫)领域中发挥着重要作用。 XPath,全称XML Path Language,是一种在XML文档中查找...

Global site tag (gtag.js) - Google Analytics