用于分析xml的shell命令运行不正常
我想解析下面的xml用于分析xml的shell命令运行不正常,xml,linux,bash,shell,terminal,Xml,Linux,Bash,Shell,Terminal,我想解析下面的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="tr
<?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>
但是我得到的结果是
-------
14
预计产量为
14
有人能告诉我我犯了什么错误吗?使用
--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
这会过滤掉以
/>
(如您尝试的那样)或-
开头的任何行,因此其他不需要的行也会被删除。xmllint有一个选项--xpath
来计算xpath表达式
例如,您可以执行以下操作:
xmllint --xpath '//*[local-name()="apptype"]/text()' your.xml
只想得到
14
哇,你实际上是在为工作使用正确的工具,而不是绝大多数类似的问题!您能解释一下xpath和shell之间的区别吗。grep命令在这里做什么。
xmllint --xpath '//*[local-name()="apptype"]/text()' your.xml