马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
很多数据格式都有自己的查询语言,比方数据库的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村中少年原创文章,未经答应不得转载,博主链接这里。
|