本文目录导读:

XPath(XML Path Language)是一种用于在XML文档中查找和定位节点的语言,以下是XPath查询XML节点的主要表达式和语法:
基本语法
节点选择
/ # 从根节点开始选择 // # 从任意位置选择节点 . # 当前节点 .. # 父节点 @ # 选取属性 * # 通配符,匹配任何元素节点 @* # 匹配任何属性节点
路径表达式示例
/bookstore # 选择根元素bookstore /bookstore/book # 选择bookstore下所有book子元素 //book # 选择所有book元素 //@lang # 选择所有名为lang的属性 /bookstore/book[1] # 选择第一个book元素 /bookstore/book[last()] # 选择最后一个book元素
谓语(条件筛选)
/bookstore/book[price>35] # 价格大于35的book /bookstore/book[price>35]/title # 价格大于35的book的标题 //book[@lang='en'] # lang属性为en的book //book[@lang] # 所有有lang属性的book /bookstore/book[position()<=3] # 前三个book元素
通配符
//* # 选择所有元素@*] # 有任意属性的title元素 //book/* # 所有book的子元素 //*[@price] # 有price属性的所有元素
运算符
比较运算符
= # 等于 != # 不等于 < # 小于 > # 大于 <= # 小于等于 >= # 大于等于
逻辑运算符
and # 逻辑与 or # 逻辑或 not() # 逻辑非
算术运算符
+ # 加法 - # 减法 * # 乘法 div # 除法 mod # 取模
常用函数
节点函数
text() # 选择文本节点 comment() # 选择注释节点 processing-instruction() # 选择处理指令 node() # 选择任意类型节点
字符串函数
contains(string1, string2) # string1包含string2 starts-with(string1, string2) # string1以string2开头 substring(string, start, len) # 获取子字符串 string-length(string) # 字符串长度 concat(str1, str2, ...) # 连接字符串 normalize-space(string) # 去除首尾空格
数值函数
number(value) # 转换为数值 sum(node-set) # 求和 floor(number) # 向下取整 ceiling(number) # 向上取整 round(number) # 四舍五入
布尔函数
true() # 返回true false() # 返回false not(boolean) # 取反 boolean(value) # 转换为布尔值
复杂查询示例
示例XML:
<bookstore>
<book category="cooking">lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
复杂查询表达式:
//book[price>20]/title # 价格大于20的book的title //book[contains(title, 'Harry')] # 标题包含Harry的book //book[starts-with(@category, 'c')] # category属性以c开头的book //book[year>2000 and price<30] # 2000年后且价格低于30的book //book[not(author='Unknown')] # 作者不是Unknown的book //book[price = //book[1]/price] # 与第一本书价格相同的所有书
轴(Axes)选择
ancestor::* # 所有祖先节点 child::* # 所有子节点 parent::* # 父节点 descendant::* # 所有后代节点 following-sibling::* # 后续兄弟节点 preceding-sibling::* # 前序兄弟节点 self::* # 当前节点 attribute::* # 所有属性
实用技巧
-
结合使用谓语和轴:
//book[price>20]/following-sibling::* # 价格大于20的book后的所有兄弟节点
-
使用多个条件:
//book[price>20 and @category='cooking']
-
查找特定文本:
//*[text()='Everyday Italian'] # 查找文本为"Everyday Italian"的元素 //*[contains(text(),'Italian')] # 查找包含"Italian"的文本节点
XPath是XML查询的强大工具,掌握这些基本表达式可以高效地从XML文档中提取所需数据。