#xml #bash #shell #sh #xmlstarlet
#xml #bash #оболочка #sh #xmlstarlet
Вопрос:
Я пытаюсь заменить или поменять местами часть xml с помощью xmlstarlet. Вот пример до и после.
Перед:
<root>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
</catalog>
<keys>
<key>
<name>Robert D. Wilsey</name>
<street>4854 Charter Street</street>
</key>
<key>
<name>Elizabeth Fletcher</name>
<street>1528 Station Street</street>
</key>
</keys>
</root>
После:
<root>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
</catalog>
<objects>
<object>
<guid>55866ddd-7601-42b6-8b6b-a2adfaa01125</guid>
</object>
</objects>
</root>
Скрипт:
read -r -d '' XML <<"EOF"
<root>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
</catalog>
<keys>
<key>
<name>Robert D. Wilsey</name>
<street>4854 Charter Street</street>
</key>
<key>
<name>Elizabeth Fletcher</name>
<street>1528 Station Street</street>
</key>
</keys>
</root>
EOF
xmlstarlet ed -u '//rootkeys' -v "
<objects>
<object>
<guid>55866ddd-7601-42b6-8b6b-a2adfaa01125</guid>
</object>
</objects>
" <<< "$XML"
Комментарии:
1. Ваш XML недопустим из-за двух корней (root и keys).
2. xmlstarlet не может редактировать недопустимый XML?
3. для xmlstarlet требуется действительный XML.
4. Хорошо, обновлено.