W3C XPath(Activity) 是一个标准XML的查询语言,它可以用来找到 XML 文档中的元素和属性,并查询它们的值。本教程将会详细讲解 XPath 的表达式、函数及其他相关内容。
XPath 表达式
XPath 表达式是由一系列轴表达式或节点测试表达式连接而成的。最简单的 XPath 表达式是所有不含连接符的节点名称,例如: bookstore
。更复杂的表达式由节点名称、轴、操作符以及文本值函数组成,例如: bookstore/book/title
。
XPath 操作数包括:数字、字符串、逻辑表达式、节点集合和布尔值。可以使用逻辑运算符 (例如大于号、小于号)、字符串运算符 (例如运算符“=”和
contains()`) 和节点运算符 (例如父节点和子节点) 来组成 XPath 表达式。
如://book[price>30]
这条表达式表示选取所有价格大于 30 的书籍。
XPath 轴
XPath 轴指定了要沿其进行搜索的节点集合。
XPath 定义了 7 个轴,但常用的是以下 4 个轴:
- ancestor: 父节点及父节点的父节点……直到文档的根节点
- descendant: 直接子节点及子节点的子节点
- following: 当前节点之后按文档顺序的所有节点
- preceding: 当前节点之前按文档顺序的所有节点
如:ancestor::*
这条表达式表示选取当前节点的所有父节点。
XPath 函数
XPath 定义了大量内置的函数,例如数学函数、字符串函数、逻辑函数等等。常用的一些函数如下:
count()
: 返回集合长度concat()
: 连接字符串contain()
: 如果字符串包含指定的子字符串,则返回 true,否则返回 falsestarts-with()
: 判断字符串是否以指定的字符串开头substring()
: 提取字符串的子集
如://book[contains(title,"Harry Potter")]
这条表达式表示选取所有标题中包含 "Harry Potter" 的书籍。
示例说明
示例1
XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
表达式://book[price>30]
结果集:
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
该表达式选取了所有价格大于 30 的书籍,结果集只包含了一本书。
示例2
XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee id="1" gender="M">
<firstName>John</firstName>
<lastName>Doe</lastName>
<age>35</age>
<department>IT</department>
<salary>55000</salary>
</employee>
<employee id="2" gender="F">
<firstName>Jane</firstName>
<lastName>Smith</lastName>
<age>47</age>
<department>HR</department>
<salary>65000</salary>
</employee>
<employee id="3" gender="M">
<firstName>William</firstName>
<lastName>Johnson</lastName>
<age>25</age>
<department>Sales</department>
<salary>55000</salary>
</employee>
<employee id="4" gender="F">
<firstName>Catherine</firstName>
<lastName>Lee</lastName>
<age>40</age>
<department>Marketing</department>
<salary>75000</salary>
</employee>
</employees>
表达式://employee[department = 'IT'][salary>50000]/firstName
结果集:
<firstName>John</firstName>
该表达式选取了部门为 IT 且薪资大于 50000 的员工的姓名,结果集只包含了一个人。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:W3C教程(9):W3C XPath 活动 - Python技术站