XPath查询XML节点表达式

wen java案例 1

本文目录导读:

XPath查询XML节点表达式

  1. 基本语法
  2. 运算符
  3. 常用函数
  4. 复杂查询示例
  5. 轴(Axes)选择
  6. 实用技巧

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::*                           # 所有属性

实用技巧

  1. 结合使用谓语和轴

    //book[price>20]/following-sibling::*  # 价格大于20的book后的所有兄弟节点
  2. 使用多个条件

    //book[price>20 and @category='cooking']
  3. 查找特定文本

    //*[text()='Everyday Italian']          # 查找文本为"Everyday Italian"的元素
    //*[contains(text(),'Italian')]         # 查找包含"Italian"的文本节点

XPath是XML查询的强大工具,掌握这些基本表达式可以高效地从XML文档中提取所需数据。

抱歉,评论功能暂时关闭!