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"
因此,widget
和 name
元素隐含在该命名空间中。您已声明前缀 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
这是我的 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"
因此,widget
和 name
元素隐含在该命名空间中。您已声明前缀 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