------------------------------------------------------------------------
-- Author : HappyFlyStone
-- Date : 2009-07-30
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--
-- 本文探讨 SQL Server 2005 中内置的 XML 支持.
-- 第二篇旨在对路径表达式作简要说明。
-- 本文来自happyflystone -CSDN博客,
-- 转载请标明出处:http://blog.csdn.net/happyflystone
------------------------------------------------------------------------
XPath
仅对针对以后在写SQL server 2005有用的部分。
什么是 XPath?
- XPath 使用路径表达式在 XML 文档中进行导航
- XPath 包含一个标准函数库
- XPath 是 XSLT 中的主要元素
XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。
- XPath 是一个 W3C 标准
XPath 术语
节点(Node)
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
基本值(或称原子值,Atomic value)
基本值是无父或无子的节点。
项目(Item)
项目是基本值或者节点。
节点关系
父(Parent)
每个元素以及属性都有一个父。
子(Children)
元素节点可有零个、一个或多个子。
同胞(Sibling)
拥有相同的父的节点
先辈(Ancestor)
某节点的父、父的父,等等。
后代(Descendant)
某个节点的子,子的子,等等
选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。这路径表达式才是关键。
下面列出了最有用的路径表达式:
表达式
描述
nodename
选取此节点的所有子节点
/
从根节点选取
//
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.
选取当前节点
..
选取当前节点的父节点
@
选取属性
表达式
描述
nodename
选取此节点的所有子节点
/
从根节点选取
//
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.
选取当前节点
..
选取当前节点的父节点
@
选取属性
举个例子说明一下:
<address>
<exam>
<name> flystone1 </name>
<street> 1401 Main Street </street>
<city state="NC">Anytown</city>
<postal-code> 210000 </postal-code>
</exam>
<exam>
<name> flystone2 </name>
<street> 1402 Main Street </street>
<city state="NC">Anytown</city>
<postal-code> 210000 </postal-code>
</exam>
</address>
对上这个XML大体上可以得出如下的路径表达式:
address 选择此节点下的所有子节点
adderss/exam 所有address子元素exam的所有子节点
/address address元素的绝对路径下的所有子节点
/@state 选取所有名为 state 的属性
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点(一般就是节点名后的[]部分)。节点下是一个子节点集,谓语完成对子集中的某个节点的选择。
比如以上例写一个路么表达式: //city[@state=”NC”]
@ 显然是为了取属性了
// 表示选取当前文档节点下所有节点
//city 当前文档下所有city节点
[@state] 表示所有包含state属性的节点
整个意思就是当前XML下所有有state属性,并属性值为NC的所有city节点
选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
通配符 | 描述 |
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
/address/* == address
多个路径并存
通过在路径表达式中使用“|”运算符,您可以选取若干个路径。
下一篇会提到Xquery , XQuery 相对于 XML,等同于 SQL 相对于数据库。下回再详细写。