当前位置: 首页 > article >正文

数据格式之-XML数据查询语句xpath介绍

很多数据格式都有自己的查询语言,例如数据库的sql语句针对的是数据库格式的增删改查,elastic 的eql针对的是基于elastic产品的格式数据增删改查。那么XML作为一种表示数据的格式,针对XML格式的数据如何进行查询呢?

针对XML数据格式的查询使用是xpath语法查询语句。本文将介绍一xpath的查询语法规则,并在之后借助工具进行演示和实现,让你在实际工作和学习过程中能够高效快速的处理XML格式的数据。

xpath 简介

实时上针对XML格式数据的查询早在1999年就已经被W3C提出,详见这里,叫做XPath1.0,XML格式的查询语法后续又经过了XPath2.0,XPath3.0的演进,增强和完善了查询语句的功能,但是目前以XPath1.0的的语法实现最为广泛。

Xpath 的查询语句在多种语言中均有实现,包括Python的libxml2,lxml。JavaScript的jquery-xpath,C++的libxml2等等。

查询语法

由于W3C关于xpath的规定读起来并不容易,本文将依据wiki的解释,介绍一下xpath 的查询语句的基本语法,详见这里。主要目的是方便读者在不同编程语言和工具中灵活的使用该种格式的查询语句灵活的查询XML数据的不同字段内容,实用性为主。

示例

本文将使用如下的示例进行说明:

<?xml version="1.0" encoding="utf-8"?>
<blog>
  <columns>
    <column name="Cyberchef 从入门到精通教程" launch="2024-07-10">
      <articles>
        <article name="Cyberchef配合Wireshark提取并解析SMB流量数据包中的文件">https://xiaofan.blog.csdn.net/article/details/143751864</article>
        <article name="Cyberchef实用功能之-批量提取json数据文件的字段内容">https://xiaofan.blog.csdn.net/article/details/144485563</article>
        <article name="Cyberchef技巧之-如何猜测数据的编码方式">https://xiaofan.blog.csdn.net/article/details/140190289</article>
      </articles>
    </column>
    <column name="Wireshark从入门到精通" launch="2018-05-10">
      <articles>
        <article name="Wireshark lua插件实现私有协议的解析">https://xiaofan.blog.csdn.net/article/details/105081441</article>
        <article name="wireshark图形操作对应的命令行操作">https://xiaofan.blog.csdn.net/article/details/115362682</article>
        <article name="Wireshark中实用的设置和使用技巧汇总">https://xiaofan.blog.csdn.net/article/details/103622111</article>
        <article name="访问一个网站会经历哪些流程">https://xiaofan.blog.csdn.net/article/details/80991929</article>
      </articles>
    </column>
  </columns>
</blog>

针对上述示例,简单说明如下:

  • XML数据的第一行往往用来表示XML数据格式版本,以及数据编码方式的。
  • XML的数据结构是一种被称之为XML tree的树状结构,详见这里。可以看到子节点之间的层级结构是非常明显的。
  • XML的root节点是一个表示整个XML数据的抽象概念,代表的是所有的XML数据。可以看到blog是root的一个子节点,columns是blog的子节点,以此类推。
  • 一个columns节点下有多个子节点,即名称各不相同的column节点,一个column节点下有多个article子节点。
  • 父节点的实际内容就是子节点,最底层节点的实际内容有最终的值。

有了上述的概念,因此如果想要查询XML对象中的article内容,大致的查询方式应该是blog/cloumns/column/articles。XML数据的查询语句,语法主要包含三个部分内容,即操作符,运算符和功能函数,下面具体介绍下具体的查询语法。

操作符

操作符即节点和属性字段的表示方式,如下:
在这里插入图片描述
对上述说明如下:

  • XPath包含两套语法格式,即简洁的查询语法格式以及更为详细的查询语法格式,通常使用的为简洁的查询语法格式。
  • XPath采用的是Unix文件路径风格的表达式,因此节点之间采用/字符进行分割,因此查询column节点的查询语句为blog/columns/column
  • // 符号表示XML数据中的任意节点的操作符,例如查询示例中的articles节点的查询语句为//articles
  • 点字符和两个点的字符分别表示当前节点以及父节点的操作符,但是这两个字符往往只能用在谓词表达式之中。
  • @ 字符是针对属性的操作符,例如如果查询专栏name对应的查询语句为//column/@name
  • 还有一个中括号,用来表示条件运算操作符,用来过滤对应的XML数据,条件运算符在XML语法中的官方叫法叫做谓词。

上述的这几个操作符应该是使用过程中最为高频的操作符。

运算符

运算符包含逻辑运算符,算术运算符以及比较运算符,如下:
在这里插入图片描述
例如针对上述示例,选择专栏这一层级中,创建日期为具体某一天查询语句为//column[@launch = "2024-07-10"],可以看到该查询语句中使用到了//,@,[],=等四种操作符和运算符。

功能函数

为了丰富查询语句的功能,Xpath还提供了如下的功能函数有限,如下:
在这里插入图片描述
例如针对上述示例,选择文章名称之中包含json字符串的的查询语句为//*[contains(@name, 'json')]或者//node()[contains(@name, 'json')],//*表示所有节点,contains为字符串搜索函数,@name表示name字段属性,json为需要在name字段中搜索的字符串,node()和 * 表示查找任意节点。
如果搜索文章的URL字段之中包含某个特定连接的查询语句为//*[contains(text(), '103622111')],103622111为需要在article的值中搜索的字符串,text()函数用来查找任何节点类型为文本的内容。

查询语句运用

有了上述的XML查询语法的说明,在实际的工作和学习过程中如何灵活运用上述查询语句呢,我将在我的专栏《Cyberchef 从入门到精通教程》,这里,之后的文章进行演示demo,详见《Cyberchef实用功能之-批量提取XML数据文件的字段内容》,这里。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。


http://www.kler.cn/a/452042.html

相关文章:

  • 43. Three.js案例-绘制100个立方体
  • Mac上Stable Diffusion的环境搭建(还算比较简单)
  • 亚信安全举办“判大势 悟思想 强实践”主题党日活动
  • SharpDX 从入门到精通:全面学习指南
  • sentinel学习笔记6-限流降级(上)
  • 安装CPU版的torch(清华源)
  • LLaMA-Factory GLM4-9B-CHAT LoRA 微调实战
  • CSS中的calc函数使用
  • 【Linux编程】一个基于 C++ 的 TCP 客户端异步(epoll)框架(一))
  • Vscode GStreamer插件开发环境配置
  • Vivado+Questasim联合仿真报错
  • 认识Python语言
  • MybatisPlus使用
  • 第一节:电路连接【51单片机-L298N-步进电机教程】
  • postman去除更新
  • PyCharm专业实验2 查找算法实现与比较
  • RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据
  • 双指针——快乐数
  • Echarts+vue电商平台数据可视化——后台实现笔记
  • 【每日学点鸿蒙知识】大图性能问题、WebView加载网页问题、H5页面数据更新问题、安全控件位置影响数据保存、企业内部应用发布
  • 双重判定锁来解决缓存击穿问题
  • VTK知识学习(27)- 图像基本操作(二)
  • Cyberchef实用功能之-批量提取XML数据文件的字段内容
  • Win10提示“缺少fbgemm.dll”怎么办?缺失fbgemm.dll文件的修复方法来啦!
  • 4-pandas常用操作
  • LeetCode:257. 二叉树的所有路径