Solução xmlstarlet complexa:
Insira o arquivo xml test.xml
:
<div>
<parent>
<before/>
<span>
<a>value 1</a>
</span>
<after/>
</parent>
<otherparent>
<span>
<a>value 2</a>
</span>
</otherparent>
</div>
O trabalho:
count=$(xmlstarlet sel -t -v 'count(//span[a])' test.xml)
for ((i=1; i<=$count; i++)); do
xmlstarlet ed -L -a '(//span[a])[1]' -t elem -n "a" -v "$(xmlstarlet sel -t -v "(//span/a)[1]" 1.xml)" -d '(//span[a])[1]' test.xml
done
-
count
- variável contendo o número despan
nós que têm filhoa
node -
ed
- modo de edição -
-L
- modifica o arquivo no local -
-a
- ação de anexação -
-d
- excluir ação
O final test.xml
(após o processamento):
<?xml version="1.0"?>
<div>
<parent>
<before/>
<a>value 1</a>
<after/>
</parent>
<otherparent>
<a>value 2</a>
</otherparent>
</div>