`
xm_king
  • 浏览: 392982 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Spring技术内幕读书笔...
浏览量:15414
社区版块
存档分类
最新评论

查询XML之路--XPath(二)

    博客分类:
  • XML
阅读更多

这一节中,我们将继续了解以下XPath的基本概念

1、 层次结构

1XPath”/文件系统/目录/目录/文件中,按照斜杠的划分,可一层一层地递进解读该路径的含义:

(1)      Xpath表达式最前面的斜杠“/:表示匹配XML文档的根节点(注意根节点是文档节点,不是根元素,文档节点包含XML声明、DOCTYPE声明、顶层的处理指令、顶层注释和根元素节点),根节点是XML节点树中最外面的节点。

(2)      /文件系统”:在“/”基础上更进一层,表示匹配文档节点下的“文件系统”元素。

(3)      /文件系统/目录”:在前面“/文件系统”的基础上更深入一层,匹配“文件系统”下的“目录”元素。

(4)      /文件系统/目录/目录/文件”:以上逻辑类推,即在匹配文档中“文件系统”元素的基础上,再往内两层“目录”元素,匹配其中所有的“文件”元素。在 1中,则是具有“名称=cmd.exe”和“名称=regedit.exe”的两个“文件”节点。

2、 线性结构

XML文档结构除了从外到里的层次性结构之外,还有一种线性的(Linear)兄弟(Sibling)关系结构。兄弟关系是指两个或者多个节点属于同一个父节点。例如 1中,“名称=cmd.exe”和“名称=regedit.exe”的两个“文件”元素之间就是兄弟关系。在文档中,前者出现在后者的前面,因此称前者为后者的额“前导兄弟”(Proceding sibling),后者则为前者的“后继兄弟”(Following sibling)。

XPath中,通过“position()”函数计算节点在线性关系中的位置。例如:XPath/文件系统/目录[position()=1]”,“[]”中间的内容称为“谓项(Predicate)”,在此使用“position()”函数,规定只匹配“/文件系统”下的第一个“目录”元素。

一、      XPath定位操作返回节点列表

XPath表达式分定位表达式和求值表达式。前者用于定位XML文档中的节点,后者根据定位结果返回值(如字符串、布尔值、数值等)。前者总是返回结果集(Node Set),或称节点列表。如果XPath匹配结果仅有1个节点符合定位条件,那么返回的匹配结果就是由该节点组成的节点集。XPath定位表达式不可能返回值,这在使用XPath时需要额外注意。

二、      根节点不是根元素

初次接触XPath的人需要注意,文档的根节点(Root node)不是根元素(Root element)。根节点就是文档节点,包含了XML文档的所有内容;根元素是XML文档包含其它元素的节点,是根节点的一个子节点。

三、      相对定位和绝对定位

UNIXLinux操作系统经验的人都知道,路径开头的“/”,代表文件系统的根路径。与此类似,XPath的定位路径也以“/”代表文档的根节点(即XML文档)。

以“/”开头的定位步骤,称为绝对定位步骤,表示从文档根节点开始定位;不以“/”开头的,则称为相对定位步骤,表示从当前上下文节点开始定位。

下一节,将介绍一下XPath的语法提要。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics