ZaLinux.ru

Как отформатировать XML в командной строке чтобы он стал удобным для чтения

Есть ли программа с интерфейсом командной строки (Linux) для форматирования XML в удобочитаемую форму?

По сути, я хочу, чтобы он изменил следующее:

<root><foo a="b">lorem</foo><bar value="ipsum" /></root>

… в примерно такой вид:

<root>
	<foo a="b">lorem</foo>
	<bar value="ipsum" />
</root>

Вариантов отформатировать XML в командной строке много. Рассмотрим некоторые из них.

xmllint

Можно передать XML в стандартный ввод команды xmllint. Эта утилита включена в пакет libxml2-utils (утилиты и библиотека для обработки XML) в Debian и в пакет с именем libxml2 в Arch Linux.

Пример команды:

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -

XML::Twig на Perl

Эта команда поставляется с модулем PERL XML::Twig (модуль для простой обработки XML), в стандартных репозиториях этот пакет называется xml-twig-tools в Debian и производных, а в Arch Linux и производных пакет называется perl-xml-twig.

Пример запуска:

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xml_pp

xmlstarlet

Эта команда поставляется с xmlstarlet - набором инструментов для преобразования, запроса, проверки и редактирования XML-документов.

Пример использования:

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmlstarlet format --indent-tab

tidy

Tidy исправляет и очищает документы HTML и XML, исправляя ошибки разметки и обновляя устаревший код до современных стандартов.

Пример запуска:

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | tidy -xml -i -

Обратите внимание, что tidy также может форматировать xml без корневого элемента. Это полезно для форматирования при передаче через конвейер (в стандартный ввод), секций xml (например, извлечённых из логов).

echo '<x></x><y></y>' | tidy -xml -iq

Опции, которые могут быть полезными для вас:

tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes < InFile.xml > OutFile.xml

Python

xml.dom.minidom из Python может форматировать XML (как python2, так и python3):

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print(xml.dom.minidom.parseString(s).toprettyxml())'

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *