666 Stimmen

Wie man XML von der Befehlszeile aus schöner formatiert?

Zugehörig: Wie kann ich JSON in einem (Unix) Shell-Skript schön formatiert ausgeben?

Gibt es ein (Unix) Shell-Skript, um XML in einer menschenlesbaren Form zu formatieren?

Im Grunde genommen möchte ich, dass es das Folgende transformiert:

lorem

... in etwas Ähnliches wie dies:

    lorem

1140voto

Gilles Quenot Punkte 153339

xmllint

Dieses Dienstprogramm wird mit libxml2-utils geliefert:

echo 'lorem' |
    xmllint --format -

Perls XML::Twig

Dieses Befehl wird mit dem XML::Twig perl Modul, manchmal mit dem xml-twig-tools Paket geliefert:

echo 'lorem' |
    xml_pp

xmlstarlet

Dieser Befehl wird mit xmlstarlet geliefert:

echo 'lorem' |
    xmlstarlet format --indent-tab

tidy

Überprüfen Sie das tidy Paket:

echo 'lorem' |
    tidy -xml -i -

Python

Python's xml.dom.minidom kann XML formatieren (funktioniert auch mit dem veralteten Python 2):

echo 'lorem' |
    python -c 'import sys; import xml.dom.minidom; s=sys.stdin.read(); print(xml.dom.minidom.parseString(s).toprettyxml())'

saxon-lint

Sie benötigen saxon-lint:

echo 'lorem' |
    saxon-lint --indent --xpath '/' -

saxon-HE

Sie benötigen saxon-HE:

 echo 'lorem' |
    java -cp /usr/share/java/saxon/saxon9he.jar net.sf.saxon.Query \
    -s:- -qs:/ '!indent=yes'

xidel

Sie benötigen xidel:

echo 'lorem' |
    xidel -s - -se . --output-node-format=xml --output-node-indent

(Credit to Reino)

Output für alle Befehle:

  lorem

189voto

crmpicco Punkte 15465

xmllint --format yourxmlfile.xml

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

\================================================

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

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

Cygwin

apt-cyg install libxml2

MacOS

Um dies auf MacOS mit Homebrew zu installieren, führen Sie einfach aus: brew install libxml2

Git

Auch verfügbar auf Git, wenn Sie den Code möchten: git clone git://git.gnome.org/libxml2

45voto

matanster Punkte 14503

Sie können auch tidy verwenden, das möglicherweise zuerst installiert werden muss (z. B. auf Ubuntu: sudo apt-get install tidy).

Dazu geben Sie etwas Ähnliches aus:

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

Hinweis: hat viele zusätzliche Lesbarkeitsflags, aber das Wortumbruchverhalten ist etwas ärgerlich zu entwirren (http://tidy.sourceforge.net/docs/quickref.html).

21voto

jasonleonhard Punkte 8428

Ohne etwas auf macOS / den meisten Unix-Systemen zu installieren.

Verwenden Sie tidy

cat dateiname.xml | tidy -xml -iq

Beim Anzeigen einer Datei mit cat an tidy werden der Dateityp xml angegeben und die Ausgabe wird leise verändert, um Fehlerausgaben zu unterdrücken. JSON funktioniert auch mit -json.

14voto

David Punkte 6249

Sie haben keine Datei erwähnt, also gehe ich davon aus, dass Sie den XML-String über die Standardeingabezeile bereitstellen möchten. In diesem Fall tun Sie folgendes:

$ echo 'lorem' | xmllint --format -

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X