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 シェル スクリプトを使用して<el name="c">0</el>、every に要素を挿入したいと思います。<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コマンドで要素を追加して属性を挿入できますか?
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 に答える