【问题标题】:Editing Values in XML using xmlstarlet使用 xmlstarlet 编辑 XML 中的值
【发布时间】:2018-12-02 00:04:40
【问题描述】:

我是使用 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 的属性。

【问题讨论】:

  • 欢迎来到 SO。 Stack Overflow 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。
  • 请出示相关代码。另请参阅How to create a Minimal, Complete, and Verifiable example
  • 您在显示的 XML 中的根(截至revision 3item,查询在其中查找items。尝试构建正确的minimal reproducible example 也会有所帮助--请注意该规范的 M 初始部分,这意味着不应显示与问题无关的任何内容(以及 Complete / Verifiable 规范,这意味着显示的代码应该足够完整,有人可以看到问题——也许您应该包含 两个不同的“Stacknumber”,一个应该更改,一个不应该更改,以完成足以测试答案)。
  • 对所有的混乱感到抱歉 - 我对 SO 完全陌生。

标签: xml linux bash xmlstarlet


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多