XPath(XML Path Language)是一种用于从 XML 文档中选择节点和值的查询语言。在 Apidog 中,XPath 用于从 XML API 响应中提取数据、验证 XML 结构,并为基于 XML 的 API 创建断言。你可以使用 XPath 通过沿着文档层级结构中的路径或一系列步骤,来选择 XML 文档中的节点或节点集。XML 示例#
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
节点选择#
XPath 允许你通过路径或步骤在 XML 文档中选择节点或节点集。以下是一些最常见的路径表达式:| 表达式 | 描述 |
|---|
nodename | 选择此节点的所有子节点 |
/ | 从根节点选择 |
// | 从当前节点开始选择文档中匹配该选择的节点,无论它们的位置如何 |
. | 选择当前节点 |
.. | 选择当前节点的父节点 |
@ | 选择属性 |
路径表达式示例#
下表展示了基于示例 XML 的路径表达式及其结果:| 路径表达式 | 结果 |
|---|
bookstore | 选择 bookstore 元素的所有子元素 |
/bookstore | 选择根元素 bookstore。如果路径以正斜杠( / )开头,则此路径始终表示到某个元素的绝对路径 |
bookstore/book | 选择作为 bookstore 子元素的所有 book 元素 |
//book | 选择文档中的所有 book 元素,无论它们位于何处 |
bookstore//book | 选择作为 bookstore 元素子元素的所有 book 元素,无论它们位于 bookstore 下的什么位置 |
//@lang | 选择所有名为 lang 的属性 |
以 / 开头的路径是绝对路径(从根开始),而不带 / 的路径则相对于当前节点。
你可以使用谓词来查找特定节点或包含指定值的节点。谓词包含在方括号中,并支持强大的过滤能力。谓词示例#
| 路径表达式 | 结果 |
|---|
/bookstore/book[1] | 选择 bookstore 子元素中的第一个 book 元素 |
/bookstore/book[last()] | 选择 bookstore 子元素中的最后一个 book 元素 |
/bookstore/book[last()-1] | 选择 bookstore 子元素中的倒数第二个 book 元素 |
/bookstore/book[position()<3] | 选择 bookstore 子元素中的前两个 book 元素 |
//title[@lang] | 选择所有具有名为 lang 的属性的 title 元素 |
//title[@lang='eng'] | 选择所有具有值为 eng 的 lang 属性的 title 元素 |
/bookstore/book[price>35.00] | 选择 bookstore 中 price 元素的值大于 35.00 的所有 book 元素 |
/bookstore/book[price>35.00]//title | 选择 bookstore 中 price 元素大于 35.00 的 book 元素下的所有 title 元素 |
XPath 的谓词使用从 1 开始的索引,这与使用从 0 开始索引的 JSONPath 不同。第一个元素是 [1],而不是 [0]。
选择未知节点#
XPath 通配符可用于选择未知的 XML 元素,而无需知道它们的确切名 称。通配符语法#
| 通配符 | 描述 |
|---|
* | 匹配任意元素节点 |
@* | 匹配任意属性节点 |
node() | 匹配任意类型的节点 |
通配符示例#
| 路径表达式 | 结果 |
|---|
/bookstore/* | 选择 bookstore 元素的所有子元素 |
//* | 选择文档中的所有元素 |
//title[@*] | 选择所有带有属性的 title 元素 |
当处理动态 XML 结构,或想要选择所有元素而不考虑其名称时,通配符非常有用。
选择多个路径#
你可以在路径表达式中使 用 | 运算符来选择多个路径,从而组合多个选择。多路径示例#
| 路径表达式 | 结果 |
|---|
//book/title | //book/price | 选择 book 元素的所有 title 和 price 元素 |
//title | //price | 选择文档中的所有 title 和 price 元素 |
/bookstore/book/title | //price | 选择 bookstore 元素的 book 元素下的所有 title 元素,以及文档中的所有 price 元素 |
在 Apidog 中的使用场景#
XML 响应验证:从 XML API 响应中提取特定值以验证正确性
SOAP API 测试:解析并验证 SOAP 响应
动态变量:存储提取的 XML 值,以便在后续请求中使用
数据提取:从复杂的嵌套 XML 结构中提取特定字段
虽然 JSON 在现代 API 中更常见,但许多旧系统和基于 SOAP 的服务仍然使用 XML。XPath 对于测试这些 API 至关重要。
参考资料#