Связанный: Как я могу красиво напечатать JSON в (unix) сценарии оболочки?
Существует ли (unix) сценарий оболочки для форматирования XML в удобочитаемой форме?
По сути, я хочу преобразовать следующее:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... в нечто вроде этого:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
xml
unix
command-line
svidgen
источник
источник
xmllint
доступ к системам Debian, вам нужно установить пакетlibxml2-utils
(libxml2
не предоставляет этот инструмент, по крайней мере, в Debian 5.0 "Lenny" и 6.0 "Squeeze").Ответы:
libxml2-utils
Эта утилита поставляется с
libxml2-utils
:в Perl
XML::Twig
Эта команда поставляется с XML :: Twig Perlмодуль, иногда
xml-twig-tools
пакет:xmlstarlet
Эта команда поставляется с
xmlstarlet
:tidy
Проверьте
tidy
пакет:питон
Python
xml.dom.minidom
может форматировать XML (как python2, так и python3):saxon-lint
Вам нужно
saxon-lint
:saxon-HE
Вам нужно
saxon-HE
:источник
echo '<xml .. />' | xmllint --some-read-from-stdn-option
?libxml2-utils
в моей красивой убунту.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 805: ordinal not in range(128)
в Python версии вы хотите определитьPYTHONIOENCODING="UTF-8"
:cat some.xml | PYTHONIOENCODING="UTF-8" python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print xml.dom.minidom.parseString(s).toprettyxml()' > pretty.xml
echo '<x></x><y></y>' | tidy -xml -iq
xmllint --format yourxmlfile.xml
xmllint - это инструмент XML для командной строки, который включен в
libxml2
( http://xmlsoft.org/ ).================================================
Примечание. Если у вас нет
libxml2
установленного программного обеспечения, вы можете установить его, выполнив следующие действия:CentOS
Ubuntu
sudo apt-get install libxml2-utils
Cygwin
apt-cyg install libxml2
MacOS
Чтобы установить это на MacOS с Homebrew, просто сделайте:
brew install libxml2
Гит
Также доступно на Git, если вы хотите код:
git clone git://git.gnome.org/libxml2
источник
sudo apt-get install libxml2-utils
git
для загрузки Windows даже устанавливает последнюю версиюxmllint
. Пример:"C:\Program Files\Git\usr\bin\xmllint.exe" --format QCScaper.test@borland.com.cds.xml > QCScaper.test@borland.com.pretty-printed.cds.xml
Вы также можете использовать tidy , который может потребоваться сначала установить (например, в Ubuntu: sudo
apt-get install tidy
).Для этого вы должны выполнить что-то вроде следующего:
Примечание: имеет много дополнительных флагов читабельности, но поведение переноса слов немного раздражает ( http://tidy.sourceforge.net/docs/quickref.html ).
источник
tidy
хорошо работает для меня тоже. В отличие отhxnormalize
этого, на самом деле это закрывает<body>
тег.tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes < InFile.xml > OutFile.xml
.alias prettyxml='tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes | pygmentize -l xml'
и затем могуcurl url | prettyxml
Вы не упомянули файл, поэтому я предполагаю, что вы хотите предоставить строку XML в качестве стандартного ввода в командной строке. В этом случае сделайте следующее:
источник
Без установки чего-либо на macOS / большинство Unix.
использование
tidy
cat filename.xml | tidy -xml -iq
Перенаправление просмотра файла с помощью команды cat на tidy с указанием типа файла xml и на отступ при тихом выводе будет подавлять вывод ошибок. JSON также работает с
-json
.источник
cat
шагtidy -xml -iq filename.xml
. Кроме того, вы даже можетеtidy -xml -iq filename.xml
использовать-m
опцию для изменения исходного файла ...xmllint поддерживает форматирование на месте :
Как писал Даниэль Вейяр:
Уровень отступа контролируется
XMLLINT_INDENT
переменной окружения, которая по умолчанию имеет 2 пробела. Пример, как изменить отступ на 4 пробела:Возможно, вам не хватает
--recover
опции, когда ваши XML-документы повреждены. Или попробуйте слабый анализатор HTML со строгим выводом XML:--nsclean
,--nonet
,--nocdata
, И--noblanks
т.д. , может быть полезным. Прочитайте справочную страницу.источник
Это заняло у меня целую вечность, чтобы найти то, что работает на моем Mac. Вот что сработало для меня:
источник
Я хотел бы добавить чистое решение Bash, так как это не так просто сделать вручную, и иногда вам не нужно устанавливать дополнительный инструмент для выполнения этой работы.
Вставьте его в файл сценария и отправьте в xml. Это предполагает, что все xml находятся в одной строке, и нигде нет лишних пробелов. Можно легко добавить некоторые дополнительные
\s*
к регулярным выражениям, чтобы исправить это.источник