XPATH

 

XPath指南

XPath 介绍。
author: zhangjunhd@gmail.com 06-12-17
Blog: http://blog.csdn.net/zhangjunhd/  

XPath 是用于在 XML 文件上寻找信息的一种语言。 XPath 用于操纵 XML 文件上的元素和属性。

1 .什么是可扩展路径( XPath )?
XPath XML 中的一种语法。 XPath XML 文档中的路径索引。 XPath 包含一个标准函数库。 XPath 是一个 XSLT 的主要元素。 XPath W3C 标准。

XPath 路径表达式用于从 XML 文档中选取节点或节点设置。这些语句类似于传统操作系统的语句。 XPath 包含 100 多种内置函数。包括:字符值,数字值, 日期和时间方法,节点操作,排序操作,布尔值等。 XPath XSLT 标准的一个重要元素。在创建 XSLT 文档前你必须先了解 XPath XQuery XPointer 都是基于 XPath 表达式构建的。它们有着相同的数据模式并支持相同的函数和操作。 XPath 1999 11 16 成为 W3C 标准。

2 XPath Nodes( 节 点 )
2.1 XPath 术语
2.1.1 节点( Nodes
XPath 里,有 7 中不同的节点:元素( element ),属性( attribute ),文本( text ),名称空间( namespace ),处理指令( processing-instruction ),内容( comment ),文档(根)( document (root) )节点, XML 文档是节点树状结构。 树根 称作文档节点(或根节点)。
下面给出一 个 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>

上述 XML 文档中的节点实例:
<bookstore>  (document node)
<author>J K. Rowling</author>  (element node)
lang="en"  (attribute node)

2.1.2 原子值( Atomic values
原子值是那些没有子或父的节点(无上下关系)。
单元素( Atomic 属性值例子:
J K. Rowling
"en"

2.1.3 项目( Items
项目是指原子值或节点。

2.2 节点间的关系
示例:

<bookstore>
<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>

2.2.1 父类( Parent
每个元素和属性都有一个
父类 在示例里: book 元素是 title, author, year, price 元素的父元素。
2.2.2 子 类( Children
节点元素可拥有任意个数的子类。在示例里,
title, author, year, price 元素都是 book 元素的子元素。
2.2.3 兄弟类( Siblings
拥有相同的父类的节点称之为兄弟类。在示例里
title, author, year, price 元素都是 兄弟类元素
2.2.4 祖 先类( Ancestors
一个节点的父类,父类的父类及更多称为该节点的祖类。在示例里,
title 元素的祖先类元素是 book 元素和 bookstore 元素。
2.2.5 子孙类( Descendants
节点的子类,子类的子类及更多称为子孙类。在示例里,
bookstore 元素的子孙类元素是 book, title, author, year, price 元素。

3 XPath 语法
XPath 通过路径表达式从 XML 文档中选取节点或节点设置。可以通过 一条语句或相应的步骤选取一个节点。

3.1 XML 文档实例
我们将在接下来的文章中引用这个
XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

3.2 选取节点
XPath 通过路径表达式在 XML 文档中选取节点。可以通过一条语句或相应的步骤选取一个节点。下面列出了最常使用的路径表达式:

表达式

注释

nodename

选取节 点下的所有子节点

/

选取根 节点

//

选取文档中所有符合条件的节点,不管该节点位于何处

.

选取当 前节点

..

选取当前节点的父节点

@

选取属 性

 
在下面的表格中,我们列出了一些路径表达式及其运行的结果:

表达式

结果

bookstore

选取 bookstore 元素的所有子节点

/bookstore

选取 bookstore 元素的根节点

注意:如果一个路径以( / )开始,那么它必须是表述该元素所在的绝对路径

bookstore/book

选取bookstore 中的所有book 子元素

//book

选取 文档中的所有book 元素

bookstore//book

选取文档中所有处于bookstore 节点下 的book 元素

//@lang

选取 所有lang 属性

 
3.3
谓 词
谓语用来指定节点所含有的特殊的值。通常使用方括号
[ ] 来指定谓词。在下面的表格中我们列出了一些谓词表达式及其运行结果:

表达式

结果

/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']

选取所有lang 属性值为‘eng’title 元素

/bookstore/book[price>35.00]

选取bookstore 节点下的所有包含price 元素大于35.00book 元素

/bookstore/book[price>35.00]/title

选取bookstore 节点下的所有包含price 元素大于35.00book 节点下的title 元素

 
3.4
选取未知节点
可以通过
XPath 通配符选取未知的 XML 元素。

通配符

注释

*

匹配任 意的节点元素

@*

匹配任 意的节点属性

node()

匹配 任意种类的节点

在下面的表格中我们列出了一些表达式及其运行结果:

表达式

结果

/bookstore/*

选取bookstore 节点中的任意子节点元 素

//*

选取文档中的所有元素

//title[@*]

选取包含任意属性的title 元素

 
3.5
选取多个路径
你可以同过在表达式中添加
| 来选取多个路径。在下面的表格中我们列 出了一些表达式及其运行结果:

表达式

结果

//book/title | //book/price

选取book 节点中的所有titleprice 元素

//title | //price

选取文 档中的所有titleprice 元素

/bookstore/book/title | //price

选取bookstore 节点下的book 节点中的所有title 元素和文档中所有的price 元素

 
4 XPath Axes
我们将在下文中引用 3.1 XML 文档实例

4.1XPath 轴( Axes
轴用于定义与当前节点相关的属性。

轴名称

结果

ancestor

选取当前节点的祖类(父类,父类的父类及更多)

ancestor-or-self

选取当前节点的祖类(父类,父类的父类及更多)和节点自身

attribute

选取当前节点的所有属性

child

选取 当前节点的所有子类

descendant

选取当前节点的所有子孙类(子类,子类的子类及更多)

descendant-or-self

选取当前节点的所有子孙类(子类,子类的子类及更多)和节点自身

following

选取文档中当前节点结束标签前的所有元素

following-sibling

选取位于当前节点后的所有兄弟类节点

namespace

选取所有当前节点的命名空间

parent

选取 当前节点的父节点

preceding

选取文档中所有位于当前节点开始标签前的元素

preceding-sibling

选取位于当前节点前的所有兄弟类节点

self

选取当 前节点

 
4.2
路径表达式
路径表达式可以使用绝对路径也可以是相对路径。绝对路径表达式以(
/ )开始,两种路径表达式都包含一个或多个 层次,用 / 分 隔:
An absolute location path:
绝对路径:
/step/step/...
A relative location path:
相对路径:
step/step/...
每个层次都对应当前节点的一个属性。层包括:
◆层路径(取决于目标节点与当前节点间的目录 关联)
◆节点测试(确认节点包含此属性)
◆无条件或条件(进一步检索节点属性)
选取的语法为:

axisname::nodetest[predicate]

实例

结果

child::book

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

attribute::lang

选取当前节点的所有 lang 属性值

child::*

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

attribute::*

选取当前节点的所有属性值

child::text()

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

child::node()

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

descendant::book

选取当前节点下所有 book 节点的子孙类

ancestor::book

选取当前节点下所有 book 的祖先类

ancestor-or-self::book

选取所有当前节点下的 book 祖先类和 book 节点自身

child::*/child::price

选取所有当前节点的子节点中(此处为“ / ”的位置)所包含的 price 元素

 
5 XPath 操作符
XPath 表达式返回值可以是:节点属 性,字符型,布尔型,数字型。下面给出了 XPath 表达式所支持的所有操作符:

操作符

注释

实例

返回值

|

连接两条语句

//book | //cd

返回所有bookcd 的节点属性

+

6 + 4

10

-

6 - 4

2

*

6 * 4

24

div

8 div 4

2

=

price=9.80

返回truefalse

!=

不等

price!=9.80

返回truefalse

小于

price<9.80

返回truefalse

<=

小于等于

price<=9.80

返回truefalse

大于

price>9.80

返回truefalse

>=

大于等于

price>=9.80

返回truefalse

or

or

price=9.80 or price=9.70

逻辑连接,判断两个条件中的一个

and

and

price>9.00 and price<9.90

逻辑连接,同时判断两个条件

mod

求余

5 mod 2

1

6 XPath 实例
让我们通过一些实例来学习一些基础的 XPath 语法。我们将在下面的例子中引用这个 XML 文档。 "books.xml" 文件 :
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>
<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
</bookstore>

6.1 选取节点
我们会用
Microsoft XMLDOM object 来载入 XML 文档,用 selectNodes() 方法来从 XML 文档中选择节点。
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("books.xml")
xmlDoc.selectNodes(path expression)

6.2 选取所有 book 节点
下面的实例演示如何选取
booksotre 节点的所有 book 子元素:
xmlDoc.selectNodes("/bookstore/book")
6.3 选取第一个 book 节点
下面的例子只选择了
bookstore 节点的第一个 book 子元素:
xmlDoc.selectNodes("/bookstore/book[0]")
6.4 选取 prices
下面的例子演示了如何从 所有的 price 节 点获取文本:
xmlDoc.selectNodes("/bookstore/book/price/text()")
6.5 选取 price>35 price 节点
下面的例子演示了如 何选取
price 属 性值大于 35 title 节点:
xmlDoc.selectNodes("/bookstore/book[price>35]/title")


CopyRight © 2004-2007 软讯网络 All Rigths Reserved.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值