我想解析以下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>
所以我使用的是below shell脚本,但它不能正常工作。有人能告诉我原因吗?
appType=$(echo -e 'cat //widget/apptype/text()' | xmllint --shell /data/config.xml | grep -v "^/ >")
当我将xml更改为
<?xml version="1.0" encoding="UTF-8"?>
<widget>
<apptype>14</apptype>
<name>TznTtApp</name>
</widget>
上面的命令工作得很好,所以我如何解析第一个完整的xml,其中当前的问题是什么?
最佳答案
这是因为appname
位于名为tzn
的命名空间中。要么定义名称空间,要么使用local-name()
函数:
apptype=$(xmllint --xpath '//*[local-name()="apptype"]/text()' input.xml)