新しい要素をXMLファイルに追加しようとしています。
元のファイル:
<levela>
<levelb>
</levelb>
</levela>
私は次の結果を得ようとしています:
<levela>
<levelb>
<levelc>
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
</levelc>
</levelb>
</levela>
私の現在の試みは:
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
しかし、私のファイルは更新されていません。
xmlstarlet
の呼び出しにタイプミスがあります(lelvelb
):
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
サブノードを追加するには、-s
または-a
ではなく、-i
操作を使用する必要があります。
xmlstarlet ed -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml
これは生成します
<?xml version="1.0"?>
<levela>
<levelb>
<levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>
必要に応じて、他の-s
操作を追加できます。 levelc
の空の-v
を削除することもできます。
xmlstarlet
の標準出力で変換の結果を取得する代わりに、file.xml
自体を変更する場合は、-L
オプションをed
に追加します。
xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml