XPath(XML Path Language) 是一种用于在 XML 文档中定位节点的语言。它可以用来选择 XML 文档中的元素、属性、文本内容等。此外,XPath 还支持通过条件筛选节点,并且可以结合函数和运算符进行复杂的查询操作。
虽然 XPath 最初是为处理 XML 设计的,但它也被广泛应用于 HTML 文档(如在 Selenium 中用于定位网页元素)。掌握 XPath 的基本语法,能够帮助你高效地提取数据或操作文档。
XPath 可以选择 XML 或 HTML 文档中的节点。常见的节点类型包括:
、
。
中的 id
属性。XML Tutorial
中的 XML Tutorial
。轴用于指定节点的选择范围。常见的轴包括:
child::
:选择当前节点的所有子节点。parent::
:选择当前节点的父节点。descendant::
:选择当前节点的所有后代节点。self::
:选择当前节点本身。谓词用于筛选符合条件的节点。它使用方括号 []
包裹,并可以包含条件表达式。
XPath 提供了多种通配符(如 *
表示任意元素)和内置函数(如 contains()
、text()
等),用于增强查询能力。
使用元素名称直接选择节点:
/books/book
/books
下选择所有
元素。<books>
<book id="1">
<title>XML Tutorialtitle>
<price>50.00price>
book>
<book id="2">
<title>HTML Guidetitle>
<price>30.00price>
book>
books>
元素/books/book
结果会返回文档中所有的
节点。
默认情况下,XPath 使用 child::
轴选择子节点。以下是一些常见的轴示例:
parent::
轴/books/book/parent::
元素的父节点(即
)。descendant::
轴/books/descendant::price
下所有后代节点中的
元素。谓词用于根据条件筛选节点。常见的谓词包括:
position()
)。=
, >
, <
, >=
, <=
)。and
, or
)。/books/book[price > 40]
元素中,子元素
的值大于 40 的节点。position()
筛选第一个
/books/book[position() = 1]
节点。要选择某个元素的属性,可以使用 @
符号:
/books/book/@id
元素的 id
属性值。id
为 1 的书籍/books/book[@id = '1']
要提取某个元素的文本内容,可以使用 text()
函数:
/books/book/title/text()
元素中的文本内容。/books/book[title[contains(text(), 'XML')]]
XPath 提供了多种通配符和内置函数,用于增强查询能力。
*
:匹配任意元素。@*
:匹配任意属性。
的子节点/books/book/*
contains()
:判断文本是否包含某个子串。starts-with()
:判断文本是否以某个字符串开头。concat()
:拼接字符串。position()
:返回当前节点的位置。XPath 常用于从 XML 或 HTML 文档中提取数据。例如:
//table/tr/td[2]
在自动化测试中,XPath 可以用来定位网页元素。例如:
//*[@id='login-button']
id
属性为 login-button
的按钮。XPath 是处理 XML 文档的首选语言之一。例如:
/books/book[price > 40]
如果需要选择某个特定的节点,可以使用 position()
函数。例如:
/books/book[position() = 2]
XPath 不区分大小写,默认情况下会将文本按原样匹配。可以通过转换函数(如 lower-case()
)处理。
//title[contains(lower-case(text()), 'xml')]
编写 XPath 表达式时,尽量保持简洁,避免过度依赖路径。例如:
//*[contains(@id, 'login')]
id
属性中包含 login
的元素。通过本文的学习,你应该掌握了 XPath 的基本语法和核心概念,包括节点选择、轴、谓词、属性选择以及函数的使用。这些知识将帮助你高效地处理 XML 文档或提取网页数据。如果你希望进一步深入学习,可以尝试结合实际项目进行练习,例如在自动化测试中编写更复杂的 XPath 表达式。
参考资料