XPath 入门指南:语法、轴与函数库详解
XPath(可扩展路径)是为XSLT转换[XSLT]和XPointer提供的共享功能,旨在对XML文档元件进行寻址,同时也支持字符串、数字和布尔操作。它使用非XML句法以便在URIs中使用,并基于XML文档的逻辑结构而非表面句法进行导航。
XPath 核心概念与数据模型
XPath 将 XML 文档建模为一棵节点树,包含多种类型的节点(如元素节点、属性节点、正文节点)。其名字来源于它在 URL 中用作对 XML 文档层次结构进行导航的路径标志。除了寻址,XPath 还能用于自然的子集匹配,即测试一个节点是否匹配特定模式,这常用于 XSLT 模板规则中。
XPath 充分支持 XML 命名空间,节点的名字被建模为由局部部分和命名空间 URI 组成的扩展名。在操作中,XPath 主要涉及以下四类返回结果:
- 节点集合:无序且无重复的节点集合。
- 布尔值:真(true)或假(false)。
- 数字:浮点数字。
- 字符串:UCS 字符的顺序。
XPath 地址路径语法
地址路径是 XPath 用于定位节点的核心语句。以下是常用语法规则及其实例解析:
第1步:理解根节点与递归搜索
/:选择 XML 文档的根结点。/*:选择根结点的所有子节点。其中*匹配任意子节点。//:/descendant-or-self::node()的缩写。例如//book选择根结点所有后代中的 book 元素;div//para选择 div 下的所有 para 子孙。
第2步:使用子节点与属性过滤
/x:选择根结点的所有 x 元素。@id或@name:选择含有指定属性的子节点。*@*:选择上下文节点的所有属性。element[@attr='value']:根据属性值过滤。例如//vendor[@id='id1_2']/book选择符合“属性 id='id1_2'”的所有 book 元素。
第3步:位置索引与条件判断
para[1]:选择上下文节点的第一个 para 孩子。doc/chapter[5]/section[2]:选择 doc 的第五个 chapter 的第二个 section。employee[@secretary and @assistant]:选择既有 secretary 属性又有 assistant 属性的 employee 孩子。chpater[title]:选择有一个或一个以上 title 孩子的 chpater 孩子。
第4步:高级轴与文本节点操作
text():选择上下文节点的所有正文节点孩子。.//para:选择上下文节点的 para 元素子孙。*/para:选择上下文节点所有的 para 孙子。
轴缩写说明:
child::是缺省轴,如div/para实为child::div/child::para。attribute::可缩写为@。
XPath 核心函数库
XPath 提供了丰富的内置函数,主要分为节点集合、字符串、布尔和数字四大类。
节点集合函数
| 函数签名 | 描述 |
|---|---|
last() |
返回从表达式求值上下文中的上下文大小(最后一个位置的数字)。 |
position() |
返回当前上下文位置。 |
count(node-set) |
返回参数 node-set 中节点的个数。 |
id(object) |
通过元素的唯一 ID 选择它们。 |
local-name(node-set?) |
返回节点扩展名的局部部分。 |
namespace-uri(node-set?) |
返回第一个节点的命名空间 URI(仅适用于元素和属性节点)。 |
name(node-set?) |
返回第一个节点的 QName(扩展名),通常等同于 local-name。 |
字符串函数
string(object?):将对象转换为字符串。concat(string, string...):返回参数的联结。starts-with(string, string):如果第一个字符串以第二个开头,返回真。contains(string, string):如果第一个字符串包含第二个字符串,返回真。substring-before(string, string):返回第一个参数在第二个参数首次出现之前的子串。例:substring-before("1999/04/01","/")返回1999。substring(, number, number?):从指定位置开始截取指定长度的子串。若省略长度,则截取到末尾。例:substring("12345",2,3)返回"234"。string-length(string?):返回字符串字符数。normalize-space(string?):清除首尾空白并将连续空白替换为单个空格。translate(string, string, string):将第一个字符串中在第二个字符串出现的字符,替换为第三个字符串中对应位置的字符。例:translate("bar","abc","ABC")返回BAr。
布尔函数
包括 boolean(object)、not(boolean)、true()、false() 以及 lang(string) 用于检测语言环境。
数字函数
number(object?):将参数转换为数字。sum(node-set):返回节点集中每个节点转数字后的总和。floor(number):返回不大于参数的最大整数。ceiling(number):返回不小于参数的最小整数。round(number):返回最接近参数的整数(平局时取正无穷大方向);处理 NaN、无穷大及零有特定规则。
相关规范参照
XPath 的设计严格遵循 W3C 标准,开发者在进行复杂解析时可参照以下规范:
- XML 1.0 Recommendation
- XML Namespaces
- XSL Transformations (XSLT) Version 1.0
- XPath 1.0 Recommendation
以上就是 XPath 入门语法的详细内容,更多关于 XPath 高级应用与实战案例的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













