xmlstarletを使用して新しい要素を作成する

xmlstarletを使用して新しい要素を作成する

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

しかし、私のファイルは更新されません。

ベストアンサー1

通話にタイプミス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必要に応じて他のタスクを追加できます。 NULL-v値を削除することもできますlevelc

file.xml標準出力に変換結果を取得するのではなく、独自に変更するには、次のオプションを追加します。xmlstarlet-Led

xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
    -s //levelc -t elem -n "element1" -v "value1" \
    file.xml

おすすめ記事