婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 利用Shell解析處理XML的方法匯總

利用Shell解析處理XML的方法匯總

熱門標簽:網絡電話外呼系統撥號軟件 申請400電話有什么用 貴陽400電話到哪里去辦理 天津智能外呼系統排名 400電話申請找 汨羅代理外呼系統 宿松高德地圖標注 4層電梯外呼控制系統設計 電銷機器人加盟多少錢

前言

前幾天在干活的時候遇到一個需要解析處理xml文件的一個需求,當時考慮到邏輯比較復雜,因此用java慢慢搞了搞。不過這個需求經常會變,每次變化之后都要重新找到jar包的代碼,改了之后還要替換原來的jar包,一來不方便修改,二來不方便統一保存代碼,三來也不方便查看jar包的功能。

其實對于這種比較靈活的功能,最方便高效的做法是采用一些腳本語言,比如python,ruby等等,開發效率高,而且也能處理一些復雜邏輯。但是由于種種原因,工作中有的機器沒有安裝這些語言的解釋器。因此不得已,研究了一波用shell腳本解析xml的方法。

說到底,shell還是不太適合處理復雜的邏輯,但是對于一些簡單的查找替換等需求,用shell來搞還是挺方便的。

我這里主要采用了下面三個工具:

  • xmllint
  • xpath
  • xml2

下面就分別總結下這三個工具的用法,方便以后查閱。

xmllint

簡述

xmllint其實是由一個叫libxml2的c語言庫函數實現的一個小工具,因此效率比較高,對不同系統的支持度也很好,功能也比較全。他一般屬于libxml2-utils這個軟件包,因此類似與sudo apt install libxml2-utils的命令就可以安裝。

功能

xmllint至少支持下面幾個常用功能:

  • 支持xpath查詢語句
  • 支持類shell的交互式查詢
  • 支持xml格式驗證
  • 支持dtd,xsd對xml的校驗
  • 支持編碼轉換
  • 支持xml格式化
  • 支持去空格壓縮
  • 支持時間效率統計

其實我們比較常用的功能主要也就是三個–xpath查詢、去空格和格式化、校驗。

比如當前有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 "http://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>

格式化:

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參數關閉stdout回顯。

流傳遞:

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腳本,本身也只有兩百來行,功能比較專一,就是提供xpath的查詢功能。他一般屬于libxml-xpath-perl這個軟件包,因此類似于sudo apt install libxml-xpath-perl的命令就可以安裝。像suse之類的系統還會直接自帶。

功能

不同系統中安裝的版本可能不同,不過基本功能是類似的:

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

xpath相比xmllint的xpath功能有一點點區別很重要,如果xpath匹配了多個結果,那么xpath就會分行輸出,而xmllint則會揉到一行:

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

xml2

簡述

xml2這個工具感覺知道的人并不多,不過其實他在某些場景里跟其他命令配合能起到奇效。這個工具的開發人員的博客似乎已經掛掉了,不過目測應該用C以及libxml2庫寫的一個小工具。一般是在xml2軟件包中,因此類似sudo apt install xml2的命令就可以安裝。

功能

這個工具包含六個命令:xml2,2xml,html2,2html,csv2,2csv,功能也非常unix,就是分別將xml,html,csv格式與一種他稱之為“flat format”的格式進行轉換。舉個例子:

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),有的表示給節點的屬性賦值(/books/book/@id=1)。寫法跟xpath很像但又不完全一樣。而且相互對應的兩個命令放在一起能做到冪等。

那么這種轉化命令有什么用呢?其實我們經常會遇到一些創建xml文件的需求,但是直接按照xml格式動態生成就非常麻煩,這時候用flat format做個中轉就非常方便了:

#!/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 "$@"

上面這段代碼就生成了與sample.xml一模一樣的new_sample.xml.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • shell生成簡單格式的xml實例
  • shell腳本實現快速生成xml格式sitemap實例分享

標簽:臨沂 海北 昌都 撫州 廣東 贛州 烏蘭察布 連云港

巨人網絡通訊聲明:本文標題《利用Shell解析處理XML的方法匯總》,本文關鍵詞  利用,Shell,解析,處理,XML,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用Shell解析處理XML的方法匯總》相關的同類信息!
  • 本頁收集關于利用Shell解析處理XML的方法匯總的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久影视传媒| 亚洲一区二区偷拍精品| 日韩精品一区二区三区视频播放| 99综合电影在线视频| 99久久夜色精品国产网站| 成人一区在线观看| av一区二区三区四区| 在线观看网站黄不卡| 欧美一区二区三区在线观看| 在线亚洲+欧美+日本专区| 欧美日韩高清在线播放| 亚洲精品在线免费观看视频| 国产日韩欧美a| 亚洲一区二区三区四区五区黄| 夜夜精品视频一区二区| 裸体一区二区三区| av一二三不卡影片| 欧美一级日韩一级| 亚洲一区二区在线免费观看视频| 久久99精品久久久久久动态图| 色婷婷av一区二区| 亚洲视频 欧洲视频| 国产真实乱子伦精品视频| 欧美无砖专区一中文字| 亚洲色欲色欲www| 国产成人在线电影| 精品国产91久久久久久久妲己 | 国产日韩欧美精品一区| 日韩专区一卡二卡| 欧洲av一区二区嗯嗯嗯啊| 国产精品国产三级国产普通话99| 国产在线精品不卡| 国产亚洲欧美日韩在线一区| 精品写真视频在线观看| 久久久亚洲高清| 国产成人aaa| 自拍偷拍欧美精品| 欧美日韩中文字幕精品| 亚洲国产毛片aaaaa无费看 | 在线影视一区二区三区| 亚洲日本免费电影| 成人激情免费视频| 色婷婷综合久久久中文一区二区| 国产精品一区二区在线看| 2欧美一区二区三区在线观看视频| 国产成人精品www牛牛影视| 成人欧美一区二区三区黑人麻豆| 欧美在线观看一二区| 麻豆免费看一区二区三区| 中文字幕av一区二区三区高| 4438成人网| 在线观看视频一区| 国产精品99久久久久久久女警 | 99久久久久免费精品国产| 喷水一区二区三区| 亚洲一区二区在线免费观看视频| 国产欧美日韩视频在线观看| 91精品午夜视频| 色菇凉天天综合网| 91在线免费看| 成人av小说网| 国产成人免费av在线| 国产一二精品视频| 激情久久五月天| 美国av一区二区| 精品一区免费av| 国产一区二区三区黄视频 | 国产日韩欧美a| 国产三级欧美三级日产三级99 | 亚洲一区二区三区自拍| 一区精品在线播放| 亚洲精品写真福利| 亚洲一区二区成人在线观看| 亚洲一区二区在线观看视频| 一区二区三区国产精品| 蜜桃久久久久久| 丁香亚洲综合激情啪啪综合| 成av人片一区二区| 欧美日韩免费在线视频| 日韩色视频在线观看| 日韩一区二区三区在线视频| 91精品国产高清一区二区三区蜜臀 | 亚洲综合无码一区二区| 亚洲国产中文字幕| 国产一区二区三区香蕉| voyeur盗摄精品| 在线电影国产精品| 亚洲欧美日韩精品久久久久| 日韩av高清在线观看| 色综合色狠狠天天综合色| 久久综合狠狠综合| 日韩成人免费看| 在线免费观看日本欧美| 中文字幕av一区二区三区高| 蜜桃av噜噜一区二区三区小说| 91在线观看免费视频| 欧美精品一区二区久久婷婷| 首页国产丝袜综合| 一本一道久久a久久精品综合蜜臀| 日韩欧美国产麻豆| 亚洲国产综合色| 色综合色综合色综合色综合色综合| 久久先锋影音av| 日韩国产欧美在线播放| 欧美日韩久久久| 亚洲成av人影院| 91精品国产综合久久久久久| 一个色在线综合| 在线播放中文一区| 国产精品香蕉一区二区三区| 中文字幕久久午夜不卡| 国产成人精品亚洲777人妖| 久久久亚洲精品一区二区三区| 国产成人免费视| 综合久久给合久久狠狠狠97色| 91在线视频观看| 奇米777欧美一区二区| 亚洲免费观看高清完整版在线| 色欧美乱欧美15图片| 亚洲福利视频一区二区| 久久久亚洲综合| 91美女片黄在线观看91美女| 亚洲成a人v欧美综合天堂下载| 日韩一级黄色大片| 色综合久久久久网| 国产激情精品久久久第一区二区 | 久久爱www久久做| 亚洲视频中文字幕| xnxx国产精品| 欧美精品一二三| 欧美午夜在线观看| 成人毛片在线观看| 国产精品18久久久| 91小视频免费看| 久久成人av少妇免费| 丝袜亚洲另类欧美综合| 国产精品理伦片| 国产欧美一区二区精品性| 日韩欧美成人激情| 67194成人在线观看| 欧美久久一二区| 91麻豆精品国产自产在线观看一区 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品888| 成人精品免费网站| 成人国产精品免费网站| 91视视频在线观看入口直接观看www | 韩国v欧美v亚洲v日本v| 国产一区二区视频在线播放| 成人在线一区二区三区| 色哟哟国产精品免费观看| 亚洲国产日韩精品| 欧美精品tushy高清| 欧美综合一区二区| 欧美日韩亚州综合| 久久你懂得1024| 成人免费视频在线观看| 亚洲不卡在线观看| 国产精品888| 欧美精品在线观看播放| 日韩一区二区三区视频| 中文字幕一区二区三区蜜月| 一区二区三区**美女毛片| 久草热8精品视频在线观看| 99视频精品在线| 久久综合给合久久狠狠狠97色69| 亚洲欧美日韩一区二区 | 欧美精品一区二| 亚洲国产va精品久久久不卡综合| 国产中文一区二区三区| 欧美三级中文字幕| 亚洲人成影院在线观看| 国产成人福利片| 久久久久综合网| 国产大陆亚洲精品国产| 日韩精品中午字幕| 日韩成人免费看| 6080午夜不卡| 日本成人在线看| 欧美成人高清电影在线| 六月丁香婷婷久久| 欧美日韩视频在线第一区| 亚洲美女区一区| 欧美日韩一区二区三区四区五区| 亚洲影院理伦片| 在线成人午夜影院| 久久激情综合网| 久久久天堂av| 日本精品免费观看高清观看| 亚洲日本成人在线观看| 欧美理论电影在线| 国产精品一区一区| 亚洲一本大道在线| 日韩亚洲欧美成人一区| 精东粉嫩av免费一区二区三区| 久久亚洲二区三区| 色狠狠桃花综合| 国产精品77777| 一区二区久久久久| 国产色产综合色产在线视频|