2015-11-04 66 views
2

我想分析下面的XMLshell命令解析XML無法正常運行

<?xml version="1.0" encoding="UTF-8"?> 
    <widget xmlns="http://www.w3.org/ns/widgets" xmlns:tzn="http://tzn.org/ns/widgets" id="http://yourdomain/TznTtApp" version="1.0.0" viewmodes="maximized"> 
    <acs orgn="*" sbdomains="true"/> 
    <tzn:application id="ca9i.TznTtApp" package="ca9i" required_version="1.0"/> 
    <apptype>14</apptype> 
    <content src="index.html"/> 
    <feature name="http://tzn.org/fate/sn.se.al"/> 
    <icon src="icon.png"/> 
    <name>TznTtApp</name> 
</widget> 

所以我用下面的shell腳本

echo -e 'cat //*[local-name()="apptype"]/text()' | xmllint --shell /data/2211334455/894949890051_1.0.4/config.xml | grep -v "^/ >" 

但我得到的輸出喜歡

------- 
14 

預計產量爲

14 

所以誰能告訴我我在做什麼錯誤?

+1

哇,你實際上是使用了合適的工具來獲得,而不是絕大多數類似的問題! –

回答

3

看起來這只是使用--shell選項時的輸出的一部分。一個替代方案是隻使用--xpath

$ xmllint --xpath '//*[local-name()="apptype"]/text()' config.xml 
14 

--shell選項會啓動一個交互的shell,您目前正在傳遞命令使用echo--xpath用於返回匹配XPath的結果。看起來這正是你想要的。

如果有,您使用--shell一個很好的理由,我想你可以添加到您的grep過濾:

$ echo 'cat //*[local-name()="apptype"]/text()' | xmllint.exe --shell config.xml | grep -v '^\(/ >\| -\)' 
14 

這種過濾掉開始/ >任何行(在你嘗試)或-,所以其他不需要的線也被移除。

+0

你能解釋xpath和shell之間的區別嗎? whats grep命令在這裏做。 – user2379020

+0

@ user2379020我已經更新了我的答案 –

1

xmllint有一個選項--xpath來評估XPath表達式。

對於你的榜樣,你可以這樣做:

xmllint --xpath '//*[local-name()="apptype"]/text()' your.xml 

只有14