Tenho tentado adicionar novos elementos a um arquivo XML.
Arquivo original:
<levela>
<levelb>
</levelb>
</levela>
Estou tentando obter o seguinte resultado:
<levela>
<levelb>
<levelc>
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
</levelc>
</levelb>
</levela>
Minha tentativa atual é:
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Mas meu arquivo não está atualizado.
Responder1
Há um erro de digitação na sua xmlstarlet
invocação ( lelvelb
):
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Para adicionar um subnó, você precisa usar a -s
operação not -a
or -i
:
xmlstarlet ed -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml
Isso produz
<?xml version="1.0"?>
<levela>
<levelb>
<levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>
Você pode adicionar outras -s
operações conforme necessário. Você também pode descartar o vazio -v
for levelc
.
Se você quiser se modificar file.xml
, em vez de obter o resultado da transformação na xmlstarlet
saída padrão de, adicione a -L
opção a ed
:
xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml