b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

使用Shell解析和处理XML的方法摘要

电脑杂谈  发布时间:2020-05-19 02:22:23  来源:网络整理

什么是解析xml_解析xml_解析xml

本文总结并介绍了使用Shell解析和处理XML的方法,并介绍了xmlint,xpath和xml2这三种工具的使用. 本文将详细介绍示例代码. 需要它的朋友可以参考它. 作为参考,让我们与编辑器一起学习.

前言

几天前,当我在工作时,我遇到了解析和处理xml文件的需求. 当时,考虑到逻辑更加复杂解析xml,我慢慢地参与其中. 但是,此要求经常更改,并且每次更改后必须再次找到jar包的代码. 更改后,必须更换原始的jar包装. 修改不方便,统一保存代码不方便,查看jar包的功能也不方便.

实际上,对于这种更灵活的功能,最方便,最有效的方法是使用某些脚本语言,例如python,ruby等,它们具有很高的开发效率并且还可以处理一些复杂的逻辑. 但是,由于各种原因,某些工作中的计算机未安装使用这些语言的解释器. 因此,我们必须研究一种使用shell脚本解析xml的方法.

归根结底,shell仍然不适合处理复杂的逻辑,但是对于某些简单的搜索和替换需求,使用shell进行操作非常方便.

我主要在这里使用以下三个工具:

下面分别总结了这三个工具的用法,以供将来参考.

xmllint

摘要

xmllint实际上是由称为libxml2的库函数实现的小型工具,因此效率相对较高,对不同系统的支持也非常好,并且功能也相对完善. 他通常属于libxml2-utils软件包,因此可以安装类似于sudo apt install libxml2-utils的命令.

解析xml_解析xml_什么是解析xml

功能

xmllint至少支持以下常用功能:

实际上,最常用的功能主要是三路径查询,空间删除和格式化以及验证.

例如,当前有sample.xml:

<books>
  <book id="1">
    <name>book1</name>
    <price>100</price>
  </book>
  <book id="2">
    <name>book2</name>
    <price>200</price>
  </book>
  <book id="3"><name>book3</name><price>300</price>
  </book>
</books>

执行xpath查询:

myths@business:~$ xmllint --xpath "//book[@id=2]/name/text()" sample.xml
book2

进入太空:

myths@business:~$ xmllint --noblanks sample.xml
<xml version="1.0">
<books><book id="1"><name>book1</name><price>100</price><license/></book><book id="2"><name>book2</name><price>200</price></book><book id="3"><name>book3</name><price>300</price></book></books>

格式:

解析xml_解析xml_什么是解析xml

myths@business:~$ xmllint --format sample.xml
<xml version="1.0">
<books>
 <book id="1">
 <name>book1</name>
 <price>100</price>
 <license/>
 </book>
 <book id="2">
 <name>book2</name>
 <price>200</price>
 </book>
 <book id="3">
 <name>book3</name>
 <price>300</price>
 </book>
</books>

XSD验证:

myths@business:~$ cat sample.xsd
<xml version="1.0" encoding="utf-8">
<xs:schema id="books" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="books" msdata:IsDataSet="true" msdata:Locale="en-US">
 <xs:complexType>
  <xs:choice minOccurs="0" maxOccurs="unbounded">
  <xs:element name="book">
   <xs:complexType>
   <xs:sequence>
    <xs:element name="name" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
    <xs:element name="price" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
   </xs:sequence>
   <xs:attribute name="id" type="xs:string" />
   </xs:complexType>
  </xs:element>
  </xs:choice>
 </xs:complexType>
 </xs:element>
</xs:schema>
 
myths@business:~$ xmllint --noout --schema sample.xsd sample.xml
sample.xml validates

注意: 验证结果信息将输出到stderr. 默认情况下,该工具会将原始文件回显到stdout. 您可以添加–noout参数以关闭标准输出回声.

流式传输:

xmllint默认为传递文件名. 如果要通过管道传递文件流以传递数据,可以执行以下操作:

myths@business:~$ cat sample.xml |xmllint --format -
<xml version="1.0">
<xml version="1.0">
<books>
 <book id="1">
 <name>book1</name>
 <price>100</price>
 <license/>
 </book>
 <book id="2">
 <name>book2</name>
 <price>200</price>
 </book>
 <book id="3">
 <name>book3</name>
 <price>300</price>
 </book>
</books>

xpath

摘要

xpath工具实际上是一个封装的perl脚本,它本身只有200行. 该功能更为具体,即它提供了xpath查询功能. 他通常属于libxml-xpath-perl软件包,因此可以安装类似于sudo apt install libxml-xpath-perl的命令. 像suse这样的系统也将直接与它们一起提供.

解析xml_什么是解析xml_解析xml

功能

安装在不同系统上的版本可能不同,但基本功能相似:

myths@business:~$ xpath -e '//book/name/text()' sample.xml
Found 3 nodes in sample.xml:
-- NODE --
book1
-- NODE --
book2
-- NODE --
book3

默认情况下,查询结果将输出到stdout,描述信息将输出到stderr. 如果方便收集结果,则可以将stderr重定向到/ dev / null,或添加-q参数:

myths@business:~$ xpath -e '//book/name/text()' sample.xml 2>/dev/null
book1
book2
book3
myths@business:~$ xpath -q -e '//book/name/text()' sample.xml
book1
book2
book3

与xmllint的xpath函数相比,xpath略有不同. 如果xpath与多个结果匹配,则xpath将在单独的行中输出,而xmllint将被摩擦成一行:

myths@business:~$ xmllint --xpath "//book/name/text()" sample.xml
book1book2book3

xml2

摘要

知道xml2工具的人并不多,但实际上他可以在某些场景中与其他命令一起工作. 该工具开发人员的博客似乎已经挂断了,但是视觉检查应该是用C和libxml2库编写的一个小工具. 它通常在xml2软件包中,因此可以安装sudo apt install xml2之类的命令.

解析xml_解析xml_什么是解析xml

功能

此工具包含六个命令: xml2、2xml,html2、2html,csv2、2csv,该函数也非常统一,即转换xml,html,csv格式和他称为“纯格式”的格式. 例如:

myths@business:~$ cat sample.xml |xml2
/books/book/@id=1
/books/book/name=book1
/books/book/price=100
/books/book
/books/book/@id=2
/books/book/name=book2
/books/book/price=200
/books/book
/books/book/@id=3
/books/book/name=book3
/books/book/price=300
myths@business:~$ cat sample.xml |xml2|2xml
<books><book id="1"><name>book1</name><price>100</price></book><book id="2"><name>book2</name><price>200</price></book><book id="3"><name>book3</name><price>300</price></book></books>

这种自定义格式非常简单和巧妙,有的指示新节点(/ books / book),有的指示给节点分配值(/ books / book / name = book1)解析xml,有的指示给节点赋值的属性( /书籍/书籍/ @ id = 1). 编写与xpath非常相似,但不完全相同. 并且彼此对应的两个命令可以一起幂等.

那么此转换命令有什么用?实际上,我们经常会遇到创建xml文件的一些需求,但是直接根据xml格式动态生成非常麻烦. 目前,使用平面格式进行传输非常方便:

#!/usr/bin/env bash
tempFile=$(mktemp tmp.XXXX)
function addBook(){
 id=$1
 name=$2
 price=$3
 echo "/books/book">>$tempFile
 echo "/books/book/@id=$id">>$tempFile
 echo "/books/book/name=$name">>$tempFile
 echo "/books/book/price=$price">>$tempFile
}
function main(){
 addBook 1 book1 100
 addBook 2 book2 200
 addBook 3 book3 300
 cat $tempFile|2xml|xmllint --format --output new_sample.xml -
 rm $tempFile
}
main "$@"

上面的代码生成的new_sample.xml与sample.xml完全一样.

摘要

以上是本文的全部内容,希望本文的内容对大家的学习或工作具有一定的参考价值. 如有任何疑问,可以留言交流,谢谢支持.

本文标题: 使用Shell解析和处理XML的方法摘要

本文地址:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-214811-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 卢宇霆
        卢宇霆

        既然在南海奈何不了他

        • 伊藤加奈惠
          伊藤加奈惠

          人家10多20年的东西拿出来照样用

      热点图片
      拼命载入中...