Search code examples
xmlxpathcommand-linecommandxmlstarlet

Append element with more than one attribute using xmlstarlet


Let say I have the following xml file content:

<Context>
   <Parameter name="n1" value="v1" override="false"/>
   <Parameter name="n2" value="v2" override="false"/>
</Context>

So In my case I want to append new element Parameter with same attributes like this :

<Context>
   <Parameter name="n1" value="v1" override="false"/>
   <Parameter name="n2" value="v2" override="false"/>
   <Parameter name="n3" value="v3" override="true"/>
</Context>

Thanks for help


Solution

  • It's a little cumbersome, but it can be done like this:

    xmlstarlet ed --subnode "//Context" --type elem -n Parameter \
    --insert  "// Context //Parameter[3]"  --type attr --name "name" --value "n3" \
    --insert  "// Context //Parameter[3]" --type attr --name "value3" --value "v3" \
    --insert  "// Context //Parameter[3]" --type attr --name "override" --value "false"\
    myfile.xml
    

    The output should be what you're looking for.

    To insert a new element before <Context> use

    xmlstarlet ed  -i "//Context" --type elem -n Parameter myfile.xml