He estado intentando agregar nuevos elementos a un archivo XML.
Archivo original:
<levela>
<levelb>
</levelb>
</levela>
Estoy intentando obtener el siguiente resultado:
<levela>
<levelb>
<levelc>
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
</levelc>
</levelb>
</levela>
Mi intento actual es:
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Pero mi archivo no está actualizado.
Respuesta1
Hay un error tipográfico en su xmlstarlet
invocación ( lelvelb
):
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Para agregar un subnodo, necesita usar la -s
operación not -a
or -i
:
xmlstarlet ed -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml
Esto produce
<?xml version="1.0"?>
<levela>
<levelb>
<levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>
Puede agregar otras -s
operaciones según sea necesario. También puedes dejar el vacío -v
para levelc
.
Si desea modificarse file.xml
, en lugar de obtener el resultado de la transformación en xmlstarlet
la salida estándar, agregue la -L
opción a ed
:
xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml