XPath从入门到精通
【摘要】 前言XPath 是一种在 XML 文档中查找信息的语言。它可用来在 XML 文档中对元素和属性进行遍历。XPath 的主要目的是简化对 XML 文档的导航。通过 XPath,我们可以编写表达式来选择 XML 文档中的节点或节点集。 XPath 简介XPath 是 XML Path Language 的缩写,用于在 XML 文档中选择节点。这些节点可以通过元素名、属性或节点在文档中的位置来选...
前言
XPath 是一种在 XML 文档中查找信息的语言。它可用来在 XML 文档中对元素和属性进行遍历。XPath 的主要目的是简化对 XML 文档的导航。通过 XPath,我们可以编写表达式来选择 XML 文档中的节点或节点集。
XPath 简介
XPath 是 XML Path Language 的缩写,用于在 XML 文档中选择节点。这些节点可以通过元素名、属性或节点在文档中的位置来选取。XPath 是 W3C 标准的一部分,并且被多种编程语言所支持,如 XSLT、XQuery 以及许多编程语言中的 XML 解析库。
XPath 节点
在 XPath 中,有七种类型的节点:元素节点、属性节点、文本节点、命名空间节点、处理指令节点、注释节点和文档(根)节点。其中,元素节点和属性节点是最常用的。
- 元素节点:XML 文档中的标签,如
<book>。 - 属性节点:元素的附加信息,总是出现在元素的开始标签中,如
<book id="123">中的id。
XPath 语法
XPath 的基本语法是由路径表达式来描述的。这些表达式以斜杠(/)或双斜杠(//)开始,后面跟着一系列的元素名和谓词。
- 绝对路径:从根节点开始的路径,如
/bookstore/book。 - 相对路径:从当前节点开始的路径,如
book/title。 - 选择所有节点:使用通配符
*,如/bookstore/*选择bookstore元素下的所有子元素。 - 选择当前节点:使用点号
.,如./title选择当前节点的title子元素(但./常常可以省略)。 - 选择父节点:使用
..,如../选择当前节点的父节点。
XPath 轴
XPath 轴定义了相对于当前节点的节点集。例如,child 轴选择当前节点的所有子节点,而 parent 轴选择当前节点的父节点。
- child:选择所有子元素,如
child::book(简写为book)。 - parent:选择父元素,如
parent::*(简写为..)。 - attribute:选择属性,如
attribute::id(简写为@id)。 - namespace:选择命名空间节点。
- descendant:选择当前元素的所有后代元素(子、孙等),如
descendant::book(简写为//book)。 - ancestor:选择当前元素的所有先辈(父、祖父等)。
- descendant-or-self:选择当前元素和所有后代元素。
- ancestor-or-self:选择当前元素和所有先辈元素。
- preceding-sibling:选择当前元素之前的所有同级元素。
- following-sibling:选择当前元素之后的所有同级元素。
XPath 运算符
XPath 支持多种运算符,用于在路径表达式中组合和筛选节点。
- 关系运算符:
<,>,<=,>= - 相等运算符:
=,!= - 逻辑运算符:
and,or - 字符串函数:如
contains(),starts-with(),substring(),concat()等 - 数值函数:如
sum(),avg(),round(),floor(),ceiling()等
XPath 实例
假设我们有以下的 XML 文档:
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
举个例子
- 选择所有书的标题:
//book/title或descendant::book/title - 选择第一本书的标题:
/bookstore/book[1]/title - 选择价格高于 35 的书的标题:
//book[price>35]/title - 选择所有带有英文标题的书的标题:
//book/title[@lang='en']
XPath 是一种强大的工具,可以帮助我们轻松地在 XML 文档中查找和提取信息。无论是编程人员还是数据分析师,都应该掌握 XPath 的基本知识和用法。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)