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

xmlstarlet update not working in case of namespace defined in xml

这是我的 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="1.0.0" 的值更新为 version="2.0.0"

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

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

但是没有更新版本号

请注意,您的 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