xmlstarlet更新在xml中定义的命名空间不起作用

时间:2017-03-28 06:05:23

标签: xml xmlstarlet

这是我的XML文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.abc.def" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
  <name>JoinTMA</name>
</widget>

我想更新version =&#34; 1.0.0&#34;的值到版本=&#34; 2.0.0&#34;

我尝试在macOS上使用以下命令

xml ed -N x="http://www.w3.org/ns/widgets" -u "/widget[@version='1.0.0']/@version" -v "2.0.0" fileName

但它没有更新版本号

1 个答案:

答案 0 :(得分:2)

请注意,您的XML具有默认命名空间

xmlns="http://www.w3.org/ns/widgets"

因此,widgetname元素隐含在该命名空间中。您已将前缀x声明映射到默认命名空间URI,因此您只需使用该前缀在XPath中引用widget

xml ed -N x="http://www.w3.org/ns/widgets" -u "/x:widget[@version='1.0.0']/@version" -v "2.0.0" fileName
                                                ^use the prefix