Могу ли я вставить подэлемент одним вызовом XMLStarlet и все еще иметь правильное форматирование?

Я использовал удивительный совет из cellux, чтобы добавить новый элемент (с атрибутами и подэлементами) под существующий элемент в этом вопросе, и столкнулся с проблемой форматирования.

Начиная с файла example.xml:

<processes>
  <process id="test"/>
</processes>

Если я использую метод cellux для выполнения нескольких с одним вызовом XML с несколькими действиями...

xml ed -L \
  -s "/processes" -t elem -n processTMP -v "" \
  -i "/processes/processTMP" -t attr -n id -v "test2" \
  -s "/processes/processTMP" -t elem -n subproc -v "s2" \
  -r "/processes/processTMP" -v "process" \
  example.xml

Полученный файл содержит одну новую строку XML.

<processes>
  <process id="test"/>
  <process id="test2"><subproc>s2</subproc></process>
</processes>

Если я сделаю несколько звонков в XML с каждым в отдельном звонке...

xml ed -L -s "/processes" -t elem -n processTMP -v "" example.xml
xml ed -L -i "/processes/processTMP" -t attr -n id -v "test2" example.xml
xml ed -L -s "/processes/processTMP" -t elem -n subproc -v "s2" example.xml
xml ed -L -r "/processes/processTMP" -v "process" example.xml

Я получаю хорошо отформатированный (с отступом) XML.

<processes>
  <process id="test"/>
  <process id="test2">
    <subproc>s2</subproc>
  </process>
</processes>

Эти два файла синтаксически идентичны, но я бы хотел сохранить XML как можно более чистым.

Кто-нибудь знает чистый способ сделать один вызов XML и все еще получить форматирование? Я знаю, что мог бы запустить его через "xml fo" в конце, но должен быть лучший способ.

0 ответов

Другие вопросы по тегам