使用 xmlstarlet 更新 xml 元素中确实存在的属性

Update attribute that does exist in xml element with xmlstarlet

我有一个 xml 文件以

开头
<?xml version='1.0' encoding='utf-8'?>
<widget 
  id="io.ionic.starter" 
  version="0.0.1" 
  xmlns="http://www.w3.org/ns/widgets" 
  xmlns:cdv="http://cordova.apache.org/ns/1.0"
>

我需要更改 id 属性的值,因此它应该如下所示:

<?xml version='1.0' encoding='utf-8'?>
<widget 
  id="sdf" 
  version="0.0.1" 
  xmlns="http://www.w3.org/ns/widgets" 
  xmlns:cdv="http://cordova.apache.org/ns/1.0"
>

我试过 xmlstarlet:

xmlstarlet edit \
  --inplace \
  -O \
  -N \
  x=http://www.w3.org/ns/widgets \
  --update "x:widget@id" \
  --value "sdf" \
  config.xml

但我得到了 Invalid expression: x:widget@id。此处正确的 xmlstarlet 命令是什么?

在 XPath 中,用 @ 表示的属性名称必须由元素中的斜杠 / 分隔。

所以不用

--update "x:widget@id"

使用

--update "x:widget/@id"