2015-11-04 58 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