Я пытаюсь добавить новые элементы в XML-файл.
Исходный файл:
<levela>
<levelb>
</levelb>
</levela>
Я пытаюсь получить следующий результат:
<levela>
<levelb>
<levelc>
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
</levelc>
</levelb>
</levela>
Моя текущая попытка:
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Но мой файл не обновлен.
решение1
xmlstarlet
В вашем призыве ( ) есть опечатка lelvelb
:
xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
-i //levelc -t elem -n "element1" -v "value1" \
file.xml
Чтобы добавить подузел, необходимо использовать операцию -s
not -a
или -i
:
xmlstarlet ed -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml
Это производит
<?xml version="1.0"?>
<levela>
<levelb>
<levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>
При необходимости можно добавить другие -s
операции. Также можно убрать пустое -v
для levelc
.
Если вы хотите изменить file.xml
себя, вместо того, чтобы получать результат преобразования на xmlstarlet
стандартном выводе, добавьте -L
опцию ed
:
xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
-s //levelc -t elem -n "element1" -v "value1" \
file.xml