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
xmlstarlet
In 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 -s
Operation verwenden, nicht -a
oder -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>
-s
Sie können bei Bedarf weitere Operationen hinzufügen . Sie können auch das leere -v
für weglassen levelc
.
Wenn Sie sich selbst ändern möchten file.xml
, anstatt das Ergebnis der Transformation in xmlstarlet
der Standardausgabe von zu erhalten, fügen Sie die folgende -L
Option hinzu ed
:
xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml