Как довольно распечатать 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>
510   5  

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.xml

xmllint является инструментом командной строки 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
cd

Ubuntu

sudo apt-get install libxml2-utils

MacOS

чтобы установить это на 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

    Ничего не найдено.