Sebastian Petters
Sebastian Petters

Reputation: 13

Editing Values in XML using xmlstarlet

I'm new using xmlstarlet, as i got to no point using bash.

I try to replace many values in an XML file at once.

What i tried was:

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>

The value i want to change is

<property name="Stacknumber" value="50"/>

I want to change every value from the property Stacknumber with a value above 1 to 30000 like

<property name="Stacknumber" value="30000"/>

But I don't know how to select only properties with values above 1.

Upvotes: 0

Views: 283

Answers (1)

Cyrus
Cyrus

Reputation: 88553

With valid XML:

xmlstarlet edit --omit-decl --update '//property[@name="Stacknumber"][@value>"1"]/@value' -v '30000' file.xml

If you want to edit file inplace, add option -L.

Output:

<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>

Upvotes: 1

Related Questions