如何使用XmlStarlet将具有属性的元素插入XML文件?

时间:2013-09-29 15:56:08

标签: xml shell xpath xmlstarlet

源XML

<xml>
    <block>
        <el name="a">92346</el>
        <el name="b">lorem</el>
    </block>
    <block>
        <el name="a">89753</el>
        <el name="b">ipsum</el>
    </block>
</xml>

对象

我想在每个<el name="c">0</el>中使用Linux shell脚本插入<block>元素:

<xml>
    <block>
        <el name="a">92346</el>
        <el name="b">lorem</el>
        <el name="c">0</el>
    </block>
    <block>
        <el name="a">89753</el>
        <el name="b">ipsum</el>
        <el name="c">0</el>
    </block>
</xml>

我可以使用XmlStarlet附加元素:

xmlstarlet ed -a '/xml/block/el[@name="b"]' \
              --type 'elem' -n 'el' -v 0

问题

  1. 选择每个<el>元素的XPath表达式是什么 没有name属性?
  2. 我可以附加元素并使用单个插入属性 xml ed命令?

1 个答案:

答案 0 :(得分:5)

答案

  1. /xml/block/el[not(@name)]
  2. other answer
  3. 所述
      

    您不能直接插入具有属性的元素,但是从那时起   每个编辑操作都按顺序执行,你可以插入一个   元素然后添加一个属性。

    命令

    xmlstarlet ed -a '/xml/block/el[@name="b"]' \
                  -t 'elem' -n 'el' -v 0 \
                  -i '/xml/block/el[not(@name)]' \
                  -t 'attr' -n 'name' -v 'c'