
文章插圖
學(xué)習(xí)解析 XML 通常被認(rèn)為是一件復(fù)雜的事情,但它不一定是這樣 。XML 是高度嚴(yán)格結(jié)構(gòu)化的,所以也是相對(duì)來(lái)說(shuō)可預(yù)測(cè)的 。也有許多其他工具可以幫助你使這項(xiàng)工作易于管理 。
我最喜歡的 XML 實(shí)用程序之一是 XMLStarlet,這是一個(gè)用于終端的 XML 工具包,借助這個(gè) XML 工具包,你可以驗(yàn)證、解析、編輯、格式化和轉(zhuǎn)換 XML 數(shù)據(jù) 。XMLStarLet 是個(gè)相對(duì)較小的命令,但瀏覽 XML 卻充滿潛力,因此本文演示了如何使用它來(lái)查詢 XML 數(shù)據(jù) 。
安裝XMLStarLet 默認(rèn)安裝在 CentOS、Fedora,和許多其他現(xiàn)代 Linux 發(fā)行版上,所以你可以打開終端,輸入 xmlstarlet來(lái)訪問(wèn)它 。如果 XMLStarLet 還沒(méi)有被安裝,你的操作系統(tǒng)則會(huì)為你安裝它 。
或者,你可以用包管理器安裝 xmlstarlet:
$ sudo dnf install xmlstarlet在 macOS 上,可以使用 MacPorts或Homebrew 。在 Windows 上,可以使用Chocolatey 。
如果都失敗了,你可以從 Sourceforge 上的源代碼手動(dòng)安裝它 。
用 XMLStarlet 解析 XML有許多工具可以幫助解析和轉(zhuǎn)換 XML 數(shù)據(jù),包括允許你 編寫自己的解析器的軟件庫(kù),和復(fù)雜的命令,如fop和xsltproc 。不過(guò)有時(shí)你不需要處理 XML 數(shù)據(jù);你只需要一個(gè)方便的方法從 XML 數(shù)據(jù)中來(lái)提取、更新或驗(yàn)證重要數(shù)據(jù) 。對(duì)于隨手的 XML 交互,我使用xmlstarlet,這是常見(jiàn)的處理 XML任務(wù)的一個(gè)典型的“瑞士軍刀”式應(yīng)用 。通過(guò)運(yùn)行--help命令,你可以看到它提供哪些選項(xiàng):
$ xmlstarlet --helpUsage: xmlstarlet [你可以通過(guò)在這些子命令的末尾附加 -help來(lái)獲得進(jìn)一步的幫助:
$ xmlstarlet sel --help-Q or --quiet- do not write anything to standard output.-C or --comp- display generated XSLT-R or --root- print root element <xsl-select>-T or --text- output is text (default is XML)-I or --indent- indent output[...]用 sel 命令選擇數(shù)據(jù)可以使用 xmlstarlet select(簡(jiǎn)稱sel)命令查看 XML 格式的數(shù)據(jù) 。下面是一個(gè)簡(jiǎn)單的 XML 文檔:
在 XML 文件中查找數(shù)據(jù)時(shí),你的第一個(gè)任務(wù)是關(guān)注要探索的節(jié)點(diǎn) 。如果知道節(jié)點(diǎn)的路徑,請(qǐng)使用 -value of選項(xiàng)指定完整路徑 。你越早瀏覽文檔對(duì)象模型(DOM)樹,就可以看到更多信息:
$ xmlstarlet select --template \--value-of /xml/os/linux/distribution \--nl myfile.xmlFedora7MoonshineLiveFedoraEverythingFedora Core6Zod--nl代表“新的一行”,它插入大量的空白,以確保在輸入結(jié)果后,終端在新的一行顯示 。我已經(jīng)刪除了樣本輸出中的一些多余空間 。
通過(guò)進(jìn)一步深入 DOM 樹來(lái)凝聚關(guān)注點(diǎn):
$ xmlstarlet select --template \--value-of /xml/os/linux/distribution/name \--nl myfile.xmlFedoraFedora Core條件選擇用于導(dǎo)航和解析 XML 的最強(qiáng)大工具之一被稱為 XPath 。它規(guī)范了 XML 搜索中使用的語(yǔ)法,并從 XML 庫(kù)調(diào)用函數(shù) 。XMLStarlet 能夠解析 XPath 表達(dá)式,因此可以使用 XPath 函數(shù)來(lái)有條件的進(jìn)行選擇 。XPath 具有豐富的函數(shù),,但我覺(jué)得 Mozilla 的 XPath 文檔更簡(jiǎn)潔 。
可以使用方括號(hào)作為測(cè)試函數(shù),將元素的內(nèi)容與某個(gè)值進(jìn)行比較 。下面是對(duì) 元素的值的測(cè)試,它僅返回與特定匹配相關(guān)聯(lián)的版本號(hào) 。
想象一下,示例 XML 文件包含以 1 開頭的所有 Fedora 版本 。要查看與舊名稱 “Fedora Core” 關(guān)聯(lián)的所有版本號(hào)(該項(xiàng)目從版本 7 開始刪除了名稱中的 “Core”),請(qǐng)執(zhí)行以下操作:
$ xmlstarlet sel --template \--value-of '/xml/os/linux/distribution[name = "Fedora Core"]/release' \--nl myfile.xml654321通過(guò)將路徑的 --value-of更改為/xml/os/linux/distribution[name=“Fedora Core”]/codename,你便可以查看這些版本的所有代號(hào) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- pdf轉(zhuǎn)ppt簡(jiǎn)單方法 如何將pdf轉(zhuǎn)化為ppt
- 預(yù)言2022年下半年將會(huì)發(fā)生什么事 疫情過(guò)后必有大災(zāi)
- 郵政寄信怎么寄
- 數(shù)據(jù)庫(kù)常用sql語(yǔ)句 sql語(yǔ)句格式化時(shí)間格式
- 高校畢業(yè)生創(chuàng)新高 909萬(wàn)畢業(yè)生將涌向哪里?
- 國(guó)內(nèi)機(jī)票燃油附加費(fèi)將恢復(fù)征收 機(jī)票燃油附加費(fèi)怎么收
- 中年零基礎(chǔ)創(chuàng)業(yè) 人到中年如何創(chuàng)業(yè)
- facebook公司的招聘案例 Facebook將公司名改為Meta
- 白領(lǐng)桌前的養(yǎng)生健身操
- 什么姿勢(shì)傷腰椎 最傷腰的6個(gè)姿勢(shì)
