Skip to content

XML XPath

XPath(XML Path Language)是一种强大的查询语言,用于从 XML 文档中选择节点(元素、属性、文本等)。可以将其视为一种指定地址或路径的方式,以在 XML 的树状结构(Tree Structure)中找到特定的信息片段。

  • 节点选择(Node Selection): 使用路径表达式(Path Expressions)定义 XML 文档的各个部分。
  • 路径导航(Path Navigation): 使用类似于文件系统路径的语法来遍历(Traverse)XML 树。
  • 内置函数(Built-in Functions): 提供一个函数库,用于字符串操作、数值计算、布尔逻辑和节点检查。
  • 其他技术的基础(Foundation for Other Technologies): 是 XSLT(用于转换 XML)的关键组成部分,并广泛用于 XQuery(用于查询 XML 数据库)、编程语言(如 Python、Java、JavaScript)以及各种 XML 工具。
  • W3C 标准(W3C Standard): XPath 是万维网联盟(W3C)的官方推荐标准,有 XPath 1.0、2.0、3.0 和 3.1 等版本。

XPath 表达式允许您精确定位 XML 文档中的特定节点或节点集。其语法非常直观,如果您熟悉目录路径,会更容易理解。

XPath 已集成到许多编程语言和平台中,包括 JavaScript(原生浏览器支持和库)、Java(javax.xml.xpath)、Python(lxml, xml.etree.ElementTree)、PHP(DOMXPath)、C# 等,使其成为 XML 数据提取的多功能工具。

XPath 是 XSLT(Extensible Stylesheet Language Transformations - 可扩展样式表语言转换)的基础。XSLT 广泛使用 XPath 表达式来选择需要从输入 XML 文档中转换的部分。

除了 XSLT,XPath 也常直接在代码中使用,用于查询加载到内存中的 XML 文档(例如,使用 DOM 解析器),以提取特定值或检查某些元素或属性是否存在。

考虑以下表示小型书店库存的示例 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">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB" available="true">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

以下是一些 XPath 表达式及其从上述文档中选择的内容描述:

XPath 表达式结果描述
/bookstore/book选择作为 bookstore 根元素的直接子元素的所有 book 元素。
//book选择文档中任意位置的所有 book 元素。
/bookstore/book[1]选择 bookstore 下的第一个 book 元素(索引从 1 开始)。
/bookstore/book[last()]选择 bookstore 下的最后一个 book 元素。
//title选择文档中任意位置的所有 title 元素。
//book/title选择作为 book 元素直接子元素的所有 title 元素。
//book[@category=‘WEB’]选择所有 book 元素,这些元素具有值为 ‘WEB’ 的 category 属性。
//book[@available]选择所有具有 available 属性的 book 元素(无论其值是什么)。
//title[@lang=‘en’]选择所有 title 元素,这些元素具有值为 ‘en’ 的 lang 属性。
/bookstore/book[price > 35.00]选择 bookstore 下的 book 元素,这些元素的 price 子元素的数值大于 35.00。
//book[price > 35.00]/title选择价格大于 35.00 的书籍的 title 元素。
//author/text()选择所有 author 元素的文本内容。

学习 XPath 对于有效地处理 XML 数据至关重要。探索专门的 XPath 教程和资源,以了解其全部功能,包括轴(axes)、运算符和函数。