1. 什么是XPath?
XPath(XML Path Language)是用于在XML(Extensible Markup Language)文档中查找信息的语言。它可以通过路径表达式来选择XML文档中的节点,类似于如何在文件系统中使用路径查找文件。XPath是W3C(万维网联盟)的标准,广泛应用于XML文档的解析和处理。
2. 为什么使用XPath?
XML是一种标记语言,用于以结构化方式存储和传输数据。由于XML文档常常包含大量嵌套的标签和复杂的层次结构,直接查找特定的节点(例如获取某个子标签或其属性值)会很复杂。XPath通过提供一种精确且强大的查询语言,使得可以轻松定位并提取所需的节点或属性。
举个例子:
<bookstore>
<book category="fiction">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="technology">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在这个XML文档中,如果想查找第二本书的标题,可以使用XPath来高效获取该节点。
3. XPath的基本语法
XPath语法使用路径表达式来选择节点。最常见的路径表达式有以下几类:
3.1 节点选择器
/
:从根节点开始选择。例如,/bookstore
会选择根节点<bookstore>
。//
:从文档中的当前节点选择匹配节点,不考虑它们的位置。例如,//title
会选择文档中所有的<title>
元素。.
:选取当前节点。例如,.//book
会选取当前节点的所有<book>
子节点。..
:选取当前节点的父节点。例如,../book
会选取父节点的<book>
元素。@
:选取属性。例如,//@category
会选取所有节点的category
属性。
3.2 过滤条件
过滤条件允许根据特定条件来选择节点。过滤条件放在方括号[]
中:
[ ]
:过滤器,用于指定查找条件。- 例子:
//book[price>30]
会选择<price>
大于30的书。 - 例子:
/bookstore/book[2]
会选择第二个<book>
节点。
- 例子:
3.3 运算符
=
:等于。例如,//book[@category='fiction']
选择所有category
属性等于fiction
的书。!=
:不等于。例如,//book[@category!='fiction']
选择category
属性不等于fiction
的书。>
,<
,>=
,<=
:比较运算符,用于数值和字符串的比较。
4. XPath的节点类型
XPath会返回特定类型的节点,理解这些节点类型有助于编写正确的XPath查询。
- 元素节点:XML文档中的标签。例如
<book>
、<author>
。 - 属性节点:元素的属性。例如
category="fiction"
中的category
属性。 - 文本节点:标签内的文本内容。例如
<title>Harry Potter</title>
中的Harry Potter
。 - 根节点:整个XML文档的根节点,通常是最外层的标签。
- 父节点:一个节点的上级节点。例如
<book>
是<title>
的父节点。
5. XPath函数
XPath提供了许多内置函数来处理节点和字符串。
text()
:返回元素的文本内容。例如,//title/text()
会返回所有标题的文本。contains()
:判断字符串是否包含某个子字符串。例如,//title[contains(text(),'Harry')]
会选择标题包含“Harry”的所有元素。starts-with()
:判断字符串是否以某个子字符串开头。例如,//title[starts-with(text(),'Harry')]