8

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

目的

我想使用 Linux shell 脚本<el name="c">0</el>在其中插入一个元素:<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>没有name属性的元素的 XPath 表达式是什么?
  2. 我可以使用单个 xml ed命令附加元素并插入属性吗?
4

1 回答 1

10

答案

  1. /xml/block/el[not(@name)]
  2. 另一个答案所述:

您不能直接插入带有属性的元素,但是由于每个编辑操作都是按顺序执行的,因此您可以插入一个元素,然后添加一个属性。

命令

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'
于 2013-09-29T15:56:07.863 回答