XML文档节点导航与选择指南 | XPath基础知识

XPath(XML Path Language)是XSLT标准的主要组成部分。它用于在XML文档中浏览元素和属性,提供了一种强大的定位和选择节点的方式。

XPath的基本特点

在这里插入图片描述

  • 代表XML路径语言: XPath是一种用于在XML文档中导航和选择节点的语言。

  • 路径样式语法: XPath使用路径表达式的“路径样式”语法来标识和导航XML文档中的节点。

  • 包含200多个内置函数: XPath包含200多个内置函数,可用于处理字符串、数值、布尔值、日期和时间等。

  • XSLT的主要组成部分: XPath是XSLT(可扩展样式表语言转换)标准的主要组成部分,用于在XML文档中选择和操作数据

XPath路径表达式

XPath使用路径表达式来选择XML文档中的节点或节点集。这些路径表达式类似于在传统计算机文件系统中使用的路径表达式。

例如,/bookstore/book/title 是一个XPath路径表达式,表示选择根元素是bookstore的子元素book的子元素title

XPath标准函数

XPath包括200多个内置函数,用于处理不同类型的数据。这些函数涵盖了字符串值、数值、布尔值、日期和时间比较、节点操作、序列操作等。

XPath表达式也可以在多种编程语言中使用,如JavaScript、Java、XML Schema、PHP、Python、C和C++等。

XPath用于XSLT

XPath是XSLT标准的主要组成部分,它与XSLT一起用于对XML文档进行转换和样式处理。具有XPath知识可以充分发挥XSLT的强大功能

XPath节点

在XPath中,有七种节点:元素、属性、文本、命名空间、处理指令、注释和根节点。XML文档被视为节点树,树的最顶层元素称为根元素。

XPath术语

  • 节点(Node): 在XPath中,有七种节点,包括元素、属性、文本、命名空间、处理指令、注释和根节点。XML文档被视为节点树,树的最顶层元素称为根元素。

  • 原子值(Atomic Value): 原子值是没有子节点或父节点的节点。例如,字符串或数字。

  • 项目(Item): 项目可以是原子值或节点。

节点之间的关系

在XPath中,节点之间有不同的关系:

  • 父节点(Parent Node): 每个元素和属性都有一个父节点。

  • 子节点(Child Node): 元素节点可以有零、一个或多个子节点。

  • 同级节点(Sibling Node): 具有相同父节点的节点。

  • 祖先节点(Ancestor Node): 节点的父节点、父节点的父节点等。

  • 后代节点(Descendant Node): 节点的子节点、子节点的子节点等。

XPath语法

XPath使用路径表达式在XML文档中选择节点。以下是一些常用的XPath路径表达式:

  • nodename:选择所有名称为 “nodename” 的节点。
  • /:从根节点选择。
  • //:选择文档中与选择匹配的当前节点的位置无关的节点。
  • .:选择当前节点。
  • ..:选择当前节点的父节点。
  • @:选择属性。

XPath示例文档

以下是我们将在下面的示例中使用的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<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>

选择节点示例

以下是一些XPath路径表达式的示例及其结果:

  • /bookstore:选择所有名称为 “bookstore” 的节点。
  • /bookstore/book:选择根元素 bookstore 的子元素 book
  • //title[@lang='en']:选择所有具有值为 “en” 的 “lang” 属性的 title 元素。

选择未知节点

XPath通配符可用于选择未知的XML节点:

  • *:匹配任何元素节点。
  • @*:匹配任何属性节点。
  • node():匹配任何类型的节点。

例如,/bookstore/* 选择 bookstore 元素的所有子元素节点。

选择多个路径

通过在XPath表达式中使用 | 运算符,您可以选择多个路径:

  • //book/title | //book/price:选择所有 book 元素的 titleprice 元素。

  • /bookstore/book/title | //price:选择 bookstore 元素的 book 元素的 title 元素 和 文档中的所有 price 元素。

XPath Axes(轴)

XML示例文档

以下是我们将在下面的示例中使用的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<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>

XPath轴

在XPath中,轴表示与上下文(当前)节点的关系,并用于在树上相对于该节点定位其他节点。以下是常用的XPath轴及其描述:

  • ancestor: 选择当前节点的所有祖先(父、祖父等)。

  • ancestor-or-self: 选择当前节点的所有祖先(父、祖父等)以及当前节点本身。

  • attribute: 选择当前节点的所有属性。

  • child: 选择当前节点的所有子节点。

  • descendant: 选择当前节点的所有后代(子、孙等)。

  • descendant-or-self: 选择当前节点的所有后代(子、孙等)以及当前节点本身。

  • following: 选择当前节点结束标签之后的文档中的所有内容。

  • following-sibling: 选择当前节点之后的所有同级节点。

  • namespace: 选择当前节点的所有命名空间节点。

  • parent: 选择当前节点的父节点。

  • preceding: 选择文档中在当前节点之前出现的所有节点,但不包括祖先、属性节点和命名空间节点。

  • preceding-sibling: 选择当前节点之前的所有同级节点。

  • self: 选择当前节点。

位置路径表达式

位置路径可以是绝对的或相对的。绝对位置路径以斜杠(/)开头,而相对位置路径则不是。位置路径由一个或多个步骤组成,每个步骤之间用斜杠分隔。

以下是一些XPath位置路径表达式的示例及其结果:

  • /child::book:选择所有作为当前节点子元素的 book 节点。

  • /attribute::lang:选择当前节点的 lang 属性。

  • /child::*:选择当前节点的所有元素子节点。

  • /attribute::*:选择当前节点的所有属性。

  • /child::text():选择当前节点的所有文本节点子节点。

  • /child::node():选择当前节点的所有子节点。

  • /descendant::book:选择当前节点的所有 book 后代。

  • /ancestor::book:选择当前节点的所有 book 祖先。

  • /ancestor-or-self::book:选择当前节点的所有 book 祖先,如果当前节点本身是一个 book 节点,也选择当前节点本身。

  • /child::*/child::price:选择当前节点的所有 price 孙子节点。

XPath运算符

XPath表达式返回一个节点集、一个字符串、一个布尔值或一个数字。以下是XPath表达式中可用的运算符列表:

  • |:计算两个节点集。

  • +:加法。

  • -:减法。

  • *:乘法。

  • div:除法。

  • =:等于。

  • !=:不等于。

  • <:小于。

  • <=:小于或等于。

  • >:大于。

  • >=:大于或等于。

  • or:或。

  • and:与。

  • mod:取模(除法余数)。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/598312.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言---浮点数在内存中的存储

前面跟大家介绍了整数在内存中的存储&#xff0c;这次再向大家介绍下浮点数在内存中的存储。 我们常见的浮点数有3.14&#xff0c;1E10 等等&#xff0c;浮点数家族包括float&#xff0c;double&#xff0c;long double类型。 浮点数的表示范围在头文件 float.h 定义。 1.浮…

蓝桥杯第十四届C++C组

目录 三国游戏 填充 翻转 【单调队列优化DP】子矩阵 【快速幂、欧拉函数】互质数的个数 【tire树】异或和之差 【质因数分解】公因数匹配 子树的大小 三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都…

python应用-计算两个日期的时间差

学习目录 1. 安装deteutil包 2. 导入relativedelta类 3. 计算两个日期的差值 4. 计算1个日期和时间差相加后得到新的日期 之前在工作中遇到一个使用场景&#xff1a;需要计算两个日期之前的差值&#xff0c;比如相差了几年几月几日&#xff0c;查找资料发现deteutil包的rel…

记一次农业工程学报投稿流程与感悟

经过数段时间的实验与熬夜&#xff0c;终于得出一个比较满意的结果&#xff0c;本想着第一篇先随便发一个试试投稿流程&#xff0c;但是经过老师修改后非让投农业工程学报&#xff0c;然后在网上查了一些信息后有点害怕&#xff0c;大致都是在说周期长&#xff0c;审稿慢等等 …

《QT实用小工具·十七》密钥生成工具

1、概述 源码放在文章末尾 该项目主要用于生成密钥&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #pragma execution_character_set("utf-8")#include "frmmain.h" #include "ui_frmmain.h" #include "qmessag…

Java实现二叉树(上)

1.树型结构 1.1树型结构的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 1.2树型结构的特点…

原型变量、原子操作、原子性、内存序

一、原子变量、原子操作 锁竞争&#xff1a;互斥锁、条件变量、原子变量、信号量、读写锁、自旋锁。在高性能基础组件优化的时候&#xff0c;为了进一步提高并发性能&#xff0c;可以使用原子变量。性能&#xff1a;原子变量 > 自旋锁 > 互斥锁。 操作临界资源的时间较长…

【leetcode】 c++ 数字全排列, test ok

1. 问题 2. 思路 3. 代码实现 #if 0 class Solution { private:vector<int> path; // 满足条件的一个结果 vector<vector<int>> res; // 结果集 void backtracking(vector<int> nums, vector<bool> used){// 若path的个数和nums个数相等&…

K8S基于containerd做容器从harbor拉取镜

实现创建pod时&#xff0c;通过指定harbor仓库里的镜像来运行pod 检查&#xff1a;K8S是不是用containerd做容器运行时&#xff0c;以及containerd的版本是不是小于1.6.22 kubectl get nodes -owide1、如果containerd小于 1.6.22&#xff0c;需要先升级containerd 先卸载旧的…

金三银四面试题(十六):MySQL面试都问什么(1)

在开发岗位面试中&#xff0c;MySQL基本是必考环节。所以接下来我们就进入MySQL八股文环节&#xff0c;看看都有哪些高频考题。 MySQL 中有哪些不同的表格&#xff1f; 在MySQL中&#xff0c;可以创建多种不同类型的表格&#xff0c;其中一些常见的类型包括&#xff1a; InnoD…

【边缘智能】00_边缘计算发展背景

本系列是个人学习《边缘就算基础知识入门》的笔记&#xff0c;仅为个人学习记录&#xff0c;欢迎交流&#xff0c;感谢批评指正 移动物联设备产生海量数据&#xff0c;数据密集型移动智能应用&#xff0c;计算密集、动态性高&#xff0c;实时性强 传统云计算架构 基于广域互联…

不开玩笑,你应该像「搬砖」一样写代码!斯坦福大学研究如是说

由于程序员不可避免要进行很多重复性的工作&#xff0c;并且工作强度很高&#xff0c;导致有一种自嘲的说法出现&#xff1a;程序员们自称自己每天都在搬砖&#xff08;实际上很多职场人都这么自嘲&#xff09;。我相信当我们说工作像「搬砖」的时候&#xff0c;只是在表达一种…