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

14voto

gavenkoa Punkte 40749

xmllint Unterstützung zur Formatierung vor Ort:

für f in *.xml; do xmllint -o $f --format $f; done

Wie Daniel Veillard geschrieben hat:

Ich denke xmllint -o tst.xml --format tst.xml sollte sicher sein, da der Parser die Eingabe vollständig in einen Baum laden wird, bevor er die Ausgabe zum Serialisieren öffnet.

Einzug wird durch die Umgebungsvariable XMLLINT_INDENT gesteuert, die standardmäßig 2 Leerzeichen beträgt. Beispiel, wie der Einzug auf 4 Leerzeichen geändert werden kann:

XMLLINT_INDENT='    '  xmllint -o out.xml --format in.xml

Sie können Probleme mit der Option --recover haben, wenn Ihre XML-Dokumente fehlerhaft sind. Oder versuchen Sie einen schwachen HTML-Parser mit strengem XML-Ausgabe:

xmllint --html --xmlout out.xml

--nsclean, --nonet, --nocdata, --noblanks etc. könnten nützlich sein. Lesen Sie die Manpage.

apt-get install libxml2-utils
dnf install libxml2
apt-cyg install libxml2
brew install libxml2

4voto

nby Punkte 101

Diese einfache Lösung bietet keine Einrückung, ist aber dennoch für das menschliche Auge viel einfacher. Außerdem ermöglicht es einfacheren Umgang mit dem XML durch einfache Werkzeuge wie grep, head, awk, etc.

Verwenden Sie sed, um '<' durch sich selbst gefolgt von einem Zeilenumbruch zu ersetzen.

Und wie von Gilles erwähnt, ist es wahrscheinlich keine gute Idee, dies in der Produktion zu verwenden.

# Überprüfen Sie, ob mehr als eine Zeile ausgegeben wird
sed 's/ prettySample.xml

3voto

Sridhar Sarnobat Punkte 21937

Dies hat mich ewig gekostet, um etwas zu finden, das auf meinem Mac funktioniert. Hier ist was für mich funktioniert hat:

brew install xmlformat
cat unformatted.html | xmlformat

1voto

Reino Punkte 2366

Mit Xidel:

$ xidel -s input.xml -e . --output-node-format=xml --output-node-indent
$ xidel -s input.xml -e 'serialize(.,{"indent":true()})'

$ echo 'lorem' | \
  xidel -se . --output-node-format=xml --output-node-indent
$ echo 'lorem' | \
  xidel -se 'serialize(.,{"indent":true()})'

1voto

jpseng Punkte 1459

yq kann verwendet werden, um XML formatiert anzuzeigen. Es gibt eine Option, um den Einzug zu definieren.

yq --input-format xml --output-format xml --indent 2

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