xml - 使用 xmlstarlet 编辑 XML 中的值
问题描述
我是使用 xmlstarlet 的新手,因为我没有使用 bash。
我尝试一次替换 XML 文件中的许多值。
我尝试的是:
xmlstarlet ed -L -u "/items/item/property[@name='Stacknumber']/@value" -v '30000' items.xml
<items>
<item name="foodEggBoiled">
<property name="Stacknumber" value="50"/> <!-- This i want to change-->
</item>
<item name="foodEggRaw">
<property name="Stacknumber" value="1"/> <!-- and this not-->
</item>
</items>
我想改变的价值是
<property name="Stacknumber" value="50"/>
我想将属性 Stacknumber 中值大于 1 的每个值更改为 30000,例如
<property name="Stacknumber" value="30000"/>
但我不知道如何只选择值大于 1 的属性。
解决方案
使用有效的 XML:
xmlstarlet edit --omit-decl --update '//property[@name="Stacknumber"][@value>"1"]/@value' -v '30000' file.xml
如果要就地编辑文件,请添加选项 -L。
输出:
<items>
<item name="foodEggBoiled">
<property name="Stacknumber" value="30000"/>
<!-- This i want to change-->
</item>
<item name="foodEggRaw">
<property name="Stacknumber" value="1"/>
<!-- and this not-->
</item>
</items>
推荐阅读
- javascript - 将我的代码转换为使用 ie11 并收到错误
- struct - 可区分联合的结构属性
- linux - 复制文件而不删除目标功能
- python - 在特定深度的 dict 上添加项目
- julia - 如何在两个for循环中使用break?
- sql-server - 如何获取每组中的最后一行
- c - c 的 if、switch 和 while 条件中的 print 语句
- python - *为什么*不是 run_until_complete 可重入。如何在没有线程的情况下逐步移植到异步?
- sql-server - 将具有不同列的多个表合并到一个表中
- graphql - GraphQL 查询 ID 以外的内容