XML XPath
使用 XPath 导航 XML
Section titled “使用 XPath 导航 XML”XPath(XML Path Language)是一种强大的查询语言,用于从 XML 文档中选择节点(元素、属性、文本等)。可以将其视为一种指定地址或路径的方式,以在 XML 的树状结构(Tree Structure)中找到特定的信息片段。
什么是 XPath?
Section titled “什么是 XPath?”- 节点选择(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 路径表达式
Section titled “XPath 路径表达式”XPath 表达式允许您精确定位 XML 文档中的特定节点或节点集。其语法非常直观,如果您熟悉目录路径,会更容易理解。
XPath 已集成到许多编程语言和平台中,包括 JavaScript(原生浏览器支持和库)、Java(javax.xml.xpath)、Python(lxml, xml.etree.ElementTree)、PHP(DOMXPath)、C# 等,使其成为 XML 数据提取的多功能工具。
XPath 在 XSLT 及其他领域的角色
Section titled “XPath 在 XSLT 及其他领域的角色”XPath 是 XSLT(Extensible Stylesheet Language Transformations - 可扩展样式表语言转换)的基础。XSLT 广泛使用 XPath 表达式来选择需要从输入 XML 文档中转换的部分。
除了 XSLT,XPath 也常直接在代码中使用,用于查询加载到内存中的 XML 文档(例如,使用 DOM 解析器),以提取特定值或检查某些元素或属性是否存在。
XPath 示例
Section titled “XPath 示例”考虑以下表示小型书店库存的示例 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)、运算符和函数。