我想解析以下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)

09-11 19:16