Verwandte: Wie kann ich JSON in (Unix) Shell-Skript hübsch drucken?
Gibt es ein (Unix-) Shell-Skript zum Formatieren von XML in lesbarer Form?
Grundsätzlich möchte ich, dass es Folgendes transformiert:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... in so etwas:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
xml
unix
command-line
svidgen
quelle
quelle
xmllint
auf Debian-Systemen verfügbar zu sein, müssen Sie das Paket installierenlibxml2-utils
(libxml2
bietet dieses Tool nicht an, zumindest nicht unter Debian 5.0 "Lenny" und 6.0 "Squeeze").Antworten:
libxml2-utils
Dieses Dienstprogramm enthält
libxml2-utils
:Perls
XML::Twig
Dieser Befehl wird mit XML :: Twig geliefert perlModul, manchmal
xml-twig-tools
Paket:xmlstarlet
Dieser Befehl enthält
xmlstarlet
:tidy
Überprüfen Sie das
tidy
Paket:Python
Pythons
xml.dom.minidom
können XML formatieren (sowohl Python2 als auch Python3):saxon-lint
Sie benötigen
saxon-lint
:saxon-HE
Sie benötigen
saxon-HE
:quelle
echo '<xml .. />' | xmllint --some-read-from-stdn-option
?libxml2-utils
in meinem schönen Ubuntu.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 805: ordinal not in range(128)
in Python-Version zu lösen , möchten Sie definierenPYTHONIOENCODING="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 ist ein Befehlszeilen-XML-Tool und in
libxml2
( http://xmlsoft.org/ ) enthalten.===============================================
Hinweis: Wenn Sie nicht
libxml2
installiert haben, können Sie es wie folgt installieren:CentOS
Ubuntu
sudo apt-get install libxml2-utils
Cygwin
apt-cyg install libxml2
Mac OS
Um dies unter Homebrew unter MacOS zu installieren, gehen Sie einfach wie folgt vor:
brew install libxml2
Git
Auch auf Git verfügbar, wenn Sie den Code möchten:
git clone git://git.gnome.org/libxml2
quelle
sudo apt-get install libxml2-utils
git
Für Windows- Download wird sogar eine aktuelle Version von installiertxmllint
. Beispiel:"C:\Program Files\Git\usr\bin\xmllint.exe" --format [email protected] > [email protected]
Sie können auch tidy verwenden , das möglicherweise zuerst installiert werden muss (z. B. unter Ubuntu: sudo)
apt-get install tidy
).Dazu würden Sie etwa Folgendes ausgeben:
Hinweis: Es gibt viele zusätzliche Lesbarkeitsflags, aber das Verhalten beim Umbrechen von Wörtern ist etwas ärgerlich ( http://tidy.sourceforge.net/docs/quickref.html ).
quelle
tidy
funktioniert auch gut für mich. Im Gegensatzhxnormalize
dazu schließt dies das<body>
Tag tatsächlich .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'
und kann danncurl url | prettyxml
Sie haben keine Datei erwähnt, daher gehe ich davon aus, dass Sie die XML-Zeichenfolge als Standardeingabe in der Befehlszeile bereitstellen möchten. Gehen Sie in diesem Fall wie folgt vor:
quelle
Ohne etwas unter macOS / den meisten Unix zu installieren.
Verwenden
tidy
cat filename.xml | tidy -xml -iq
Wenn Sie das Anzeigen einer Datei mit cat umleiten, um den Dateityp von xml anzugeben und bei leiser Ausgabe einzurücken, wird die Fehlerausgabe unterdrückt. JSON funktioniert auch mit
-json
.quelle
cat
Schritt nicht :tidy -xml -iq filename.xml
. Sie können auchtidy -xml -iq filename.xml
die-m
Option verwenden, um die Originaldatei zu ändern ...xmllint unterstützt die Formatierung vor Ort :
Wie Daniel Veillard geschrieben hat:
Die Einrückungsstufe wird durch die
XMLLINT_INDENT
Umgebungsvariable gesteuert , die standardmäßig 2 Leerzeichen beträgt. Beispiel für das Ändern des Einzugs in 4 Leerzeichen:Möglicherweise fehlt
--recover
Ihnen die Option, wenn XML-Dokumente beschädigt sind. Oder versuchen Sie es mit einem schwachen HTML-Parser mit strenger XML-Ausgabe:--nsclean
,--nonet
,--nocdata
,--noblanks
Kann usw. nützlich sein. Manpage lesen.quelle
Ich habe ewig gebraucht, um etwas zu finden, das auf meinem Mac funktioniert. Folgendes hat bei mir funktioniert:
quelle
Ich möchte eine reine Bash-Lösung hinzufügen, da es nicht so schwierig ist, dies einfach von Hand zu tun, und manchmal möchten Sie kein zusätzliches Tool installieren, um die Aufgabe zu erledigen.
Fügen Sie es in eine Skriptdatei ein und leiten Sie es in die XML-Datei ein. Dies setzt voraus, dass sich die XML-Datei in einer Zeile befindet und nirgendwo zusätzliche Leerzeichen vorhanden sind. Man könnte
\s*
den regulären Ausdrücken leicht etwas mehr hinzufügen, um das zu beheben.quelle