2013-04-18 17 views

Antwort

611

Versuch dies zu tun:

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

Dieses Dienstprogramm kommt mit libxml2-utils

oder

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

Dieser Befehl ist mit XML::Twig Modul, manchmal xml-twig-tools Paket.

oder

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

Dieser Befehl ist mit xmlstarlet

oder

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

Scheck tidy Paket

oder

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()' 

oder

echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | 
    saxon-lint --indent --xpath '/' - 

Scheck saxon-lint

oder

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' 

prüfen saxon-HE

+0

Gute, schnelle Antwort. Die erste Option scheint zu sein, dass sie auf modernen * nix-Installationen allgegenwärtiger sein wird. Ein kleiner Punkt; aber kann es ohne Durcharbeitung einer Zwischendatei aufgerufen werden? I.e., echo '' | xmllint --some-read-from-stdn-option'? – svidgen

+0

Siehe meinen bearbeiteten Post –

+0

Das Paket ist 'libxml2-utils' in meinem schönen ubuntu. – franzlorenzon

9

Sie eine Datei nicht erwähnt hat, so gehe ich davon aus Sie die XML-String zur Verfügung stellen möchten als Standardeingabe in der Befehlszeile. In diesem Fall wie folgt vor:

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

Um xmllint auf Debian-Systeme zu haben, müssen Sie nicht das Paket libxml2-utils (libxml2 installieren dieses Tool nicht zur Verfügung stellen, zumindest nicht auf Debian 5.0 „Lenny“ und 6.0 " Drücken").

95

xmllint --format yourxmlfile.xml

xmllint ist ein XML-Tool-Befehlszeile und in libxml2 (http://xmlsoft.org/) enthalten.

============================================== ==

Hinweis: Wenn Sie nicht libxml2 installiert haben können Sie es installieren, indem Sie wie folgt vorgehen:

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

Um dies auf MacOS mit Homebrew installieren Sie einfach: brew install libxml2

+4

Sputnicks Antwort enthält diese Information, aber die Antwort von crmpicco ist die nützlichste Antwort auf die allgemeine Frage, wie man XML schön drucken kann. –

+2

wir können diese formatierte XML-Ausgabe in eine andere XML-Datei schreiben und diese verwenden .. zB xmllint --format yourxmlfile.xml >> neue-datei.xml – LearnToLive

+2

Unter Ubuntu 16.04 können Sie folgendes verwenden: 'sudo apt-get install libxml2-utils' – Melle

27

Sie auch tidy verwenden können, die zuerst installiert werden müssen (z auf Ubuntu: sudo apt-get install tidy).

Dazu würden Sie so etwas wie folgende Ausgabe:

tidy -xml -i your-file.xml > output.xml 

Hinweis: hat viele zusätzliche Lesbarkeit Flaggen, aber word-wrap Verhalten ist ein bisschen ärgerlich zu entwirren (http://tidy.sourceforge.net/docs/quickref.html).

+0

Hilfreich, weil ich xmllint nicht erhalten konnte, um Zeilenumbrüche zu einer einzelnen XML-Zeile hinzuzufügen. Vielen Dank! – xlttj

+0

'Ordentlich' funktioniert auch gut für mich. Im Gegensatz zu 'hxnormalize' schließt diese Funktion das' '-Tag. –

+6

BTW, hier sind einige Optionen, die ich nützlich gefunden habe: 'Ordentlich --indent Ja --inden-spaces 4 --indent-Attribute ja --wrap-Attribute ja --input-xml ja --output-xml ja < InFile.xml> OutFile.xml'. –

Verwandte Themen