Erstellen neuer Elemente mit xmlstarlet

Erstellen neuer Elemente mit xmlstarlet

Ich habe versucht, einer XML-Datei neue Elemente hinzuzufügen.

Originaldatei:

<levela>
  <levelb>
  </levelb>
</levela>

Ich versuche, das folgende Ergebnis zu erzielen:

<levela>
  <levelb>
    <levelc>
      <element1>value1</element1>
      <element2>value2</element2>
      <element3>value3</element3>
    </levelc>
  </levelb>
</levela>

Mein aktueller Versuch ist:

xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
    -i //levelc -t elem -n "element1" -v "value1" \
    file.xml

Aber meine Datei wird nicht aktualisiert.

Antwort1

xmlstarletIn Ihrem Aufruf ( ) ist ein Tippfehler lelvelb:

xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
    -i //levelc -t elem -n "element1" -v "value1" \
    file.xml

Um einen Unterknoten hinzuzufügen, müssen Sie die -sOperation verwenden, nicht -aoder -i:

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

Dadurch entsteht

<?xml version="1.0"?>
<levela>
  <levelb>
  <levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>

-sSie können bei Bedarf weitere Operationen hinzufügen . Sie können auch das leere -vfür weglassen levelc.

Wenn Sie sich selbst ändern möchten file.xml, anstatt das Ergebnis der Transformation in xmlstarletder Standardausgabe von zu erhalten, fügen Sie die folgende -LOption hinzu ed:

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

verwandte Informationen