目录
XPath是什么呢?
XPath,全称XML Path Language,是一种在XML文档中查找信息的语言,它被设计用来在XML结构中导航,尽管它同样适用于HTML文档。XPath最初于1999年11月16日成为W3C标准,旨在支持XSLT、XPointer等技术,通过路径表达式来选取XML文档中的节点或节点集。
Xpath的核心功能与特点
- 路径表达式:XPath使用类似文件系统路径的表达式来定位文档中的元素和属性。例如,/root/child 会选取根节点下的直接子节点child。
- 选择节点:XPath能精确选择元素、属性、文本节点等,支持绝对路径(如 /element)和相对路径(如 ./element 或 element)。
- 条件筛选:通过谓词(方括号内的表达式),可以基于条件选择节点,如 //book[@author='J.K. Rowling'] 选取所有作者为J.K. Rowling的book节点。
- 节点轴:XPath提供节点轴(如child::, parent::, self::等),帮助在节点树中导航。
- 函数支持:XPath提供了丰富的函数库,用于字符串处理、数值计算、节点测试等,如count(), normalize-space(), contains()等。
- 表达式组合:可以使用逻辑运算符(如 and, or)和算术运算符来组合复杂的表达式。
XPath的应用
- 在Web自动化测试中的应用:XPath在Selenium等工具中广泛用于Web元素的定位,提供了一种灵活的定位策略,尤其是在页面结构复杂时。
- 在爬虫技术中的应用:XPath是数据提取的关键工具,通过解析HTML文档,精准提取所需信息。
XPath中的路径表达式与节点以及相关语法
XPath路径表达式是XPath语言的核心部分,用于在XML或HTML文档中定位特定的节点。
XPath中的节点
XPath中的节点是XML文档结构的基本单位,它们构成了XML文档的树状结构。以下是XPath中七种类型的节点及其简要说明:
-
元素节点(Element):XML文档中最重要的节点类型,代表XML结构中的标签,如<book>、<title>等。
-
属性节点(Attribute):附属于元素节点的,提供额外信息。例如,<title lang="en">中的lang="en"就是属性节点。
-
文本节点(Text):元素节点内部的文本内容,例如<title>Harry Potter</title>中的"Harry Potter"。
-
命名空间节点(Namespace):定义元素和属性的命名空间,虽然在日常XPath使用中较少直接操作。以下为使用XPath查询带有命名空间的元素的例子。
from lxml import etree # 定义命名空间 ns = {'n': 'http://www.example.com/ns'} # 加载 XML 字符串 xml_data = """ <root xmlns:n="http://www.example.com/ns"> <n:element>Content</n:element> </root> """ root = etree.fromstring(xml_data) # 使用 XPath 查询 elements = root.xpath('n:element', namespaces=ns) # 输出元素内容 for element in elements: print(element.text) #Content
-
处理指令节点(Processing Instruction):XML文档中用于指导处理程序的指令,如<?xml-stylesheet type="text/xsl" href="style.xsl"?>。
-
注释节点(Comment):XML文档中的注释部分,如<!-- 这是一个注释 -->。
-
文档(根)节点(Document Node 或 Root Node):整个XML文档的顶级节点,其他所有节点都是其子节点。
XPath中的其他节点术语
基本值(Atomic value)
基本值又称原子值,基本值是无父或无子的节点。
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
在这个XML文档中,以下是一些基本值节点的例子:
- "Harry Potter":这是<title>元素的文本内容。
- "J K. Rowling":这是<author>元素的文本内容。
- "en":这是<title>元素的lang属性的值。
- "2005":这是<year>元素的文本内容。
- "29.99":这是<price>元素的文本内容。
项目(Item)
项目是基本值或节点
节点间的关系
在XPath中,节点间的关系是理解和使用XPath表达式的关键。以下是一个基于XML文档的示例,来说明几种主要的节点关系:
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XPath</title>
<author>John Doe</author>
<year>2020</year>
<price>19.99</price>
</book>
</bookstore>
节点间关系的例子
-
父节点(Parent)
- 示例:<title>元素的父节点是<book>。
- XPath表达式:从<title>元素选择其父节点,可以表示为./parent::book。
-
子节点(Children)
- 示例:<book>元素有四个子节点:<title>、<author>、<year>和<price>。
- XPath表达式:从<bookstore>元素选择所有<book>的子节点,可以表示为/bookstore/book/*。
-
同胞(Sibling)
- 示例&#x