Как довольно распечатать XML из командной строки?
связанный: как я могу довольно-распечатать JSON в сценарии оболочки (unix)?
есть ли сценарий оболочки (unix) для форматирования XML в удобочитаемой форме?
в принципе, я хочу, чтобы преобразовать следующим образом:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... в нечто вроде этого:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
5 ответов:
попробуйте сделать это :
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -эта утилита поставляется с libxml2-utils
или
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xml_ppэта команда приходит с XML:: Twig perl модуль, иногда
xml-twig-toolsпакета.или
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmlstarlet format --indent-tabэта команда приходит с xmlstarlet
или
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | tidy -xml -i -Регистрация
tidyпакетили
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()'или
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | saxon-lint --indent --xpath '/' -Регистрация saxon-lint
или
echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \ -s:- -qs:/ '!indent=yes'Регистрация Саксон-он
xmllint --format yourxmlfile.xmlxmllint является инструментом командной строки XML и входит в
libxml2(http://xmlsoft.org/).================================================
Примечание: Если у вас нет
libxml2установлен, вы можете установить его, выполнив следующее:CentOS
cd /tmp wget ftp://xmlsoft.org/libxml2/libxml2-2.8.0.tar.gz tar xzf libxml2-2.8.0.tar.gz cd libxml2-2.8.0/ ./configure make sudo make install cdUbuntu
sudo apt-get install libxml2-utilsMacOS
чтобы установить это на MacOS с Homebrew просто сделать:
brew install libxml2
вы также можете использовать порядок, который может потребоваться установить сначала (например, на Ubuntu: sudo
apt-get install tidy).для этого вы бы выдали что-то вроде следующего:
tidy -xml -i your-file.xml > output.xmlПримечание: имеет много дополнительных флагов читаемости, но поведение переноса слов немного раздражает, чтобы распутать (http://tidy.sourceforge.net/docs/quickref.html).
вы не упомянули файл, поэтому я предполагаю, что вы хотите указать строку XML в качестве стандартного ввода в командной строке. В этом случае выполните следующие действия:
$ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -
xmllint поддерживает форматирование на месте:
for f in *.xml; do xmllint -o $f --format $f; doneкак написал Даниэль Вейяр:
Я думаю,
xmllint -o tst.xml --format tst.xmlдолжно быть безопасно, так как парсер полностью загрузит вход в дерево перед открытием выхода необходимо его сериализовать.уровень отступа контролируется
XMLLINT_INDENTпеременная окружения, которая по умолчанию составляет 2 пробела. Пример как изменить отступ на 4 пробела:XMLLINT_INDENT=' ' xmllint -o out.xml --format in.xmlвы можете иметь недостаток с
--recoverопция, когда вы XML-документы сломаны. Или попробуйте слабый парсер HTML со строгим выводом XML:xmllint --html --xmlout <in.xml >out.xml
--nsclean,--nonet,--nocdata,--noblanksи т. д. могут быть полезны. Читать man-страницы.apt-get install libxml2-utils apt-cyg install libxml2 brew install libxml2
Comments