Tipps und Tricks zu Perl und CPAN-Modulen

XML Pretty-Printing mit XML::Twig

Beitrag von Uwe am 04.04.2007 um 12:30 Uhr | 6 Kommentare

Manchmal möchte man XML schön eingerückt ausgeben ("pretty printing" auf Englisch), weil das einfach übersichtlicher ist, als direkt alle Tags hintereinander :-)

Dazu verwende ich XML::Twig:

#!/usr/bin/perl

use warnings;
use strict;

use XML::Twig;

# XMLRPC-Request
my $xml = <<'END';
<?xml version="1.0"?><methodCall><methodName>Test</methodName>
<params><param><value><string>test</string></value></param>
</params></methodCall>
END

my $twig = XML::Twig->new(pretty_print => 'indented');
$twig->parse($xml);

$twig->print;

Download: pretty-print.pl

Anstelle von "indented" für den Parameter "pretty_print" gibt es noch eine Reihe weiterer Optionen (z. B. kompakter oder ohne Einrückung).

Die Methode "print" gibt unser XML auf der Standardausgabe aus. Mit "sprint" kann man dies auch in einer Variable auffangen - also kein Grund, gleich die Standardausgabe aufzuzeichen. :-)

Die Ausgabe sieht dann so aus:

<?xml version="1.0"?>
<methodCall>
  <methodName>Test</methodName>
  <params>
    <param>
      <value>
        <string>test</string>
      </value>
    </param>
  </params>
</methodCall>

Wer auf der Kommandozeile XML-Dateien "pretty-printen" möchte, der kann "xml_pp" benutzen, welches in der Distribution von XML::Twig enthalten ist.

Vom gleichen Autor ist übrigens auch noch eins meiner absoluten Lieblingsmodule: HTML::TreeBuilder::XPath (kommt auch hier im Blog zum Einsatz). Doch dazu in einem späteren Beitrag mehr...


Kommentar abgeben


Sehr nett, ich wundere mich immer wieder, was es alles im CPAN gibt.

Wer das ganze dann noch syntax-hilighten will, kommt mit Text::VimColor weiter (Vim vorausgesetzt). Damit bekommt man dann über 400 verschiedene Programmiersprachen und Dateiformate hin - XML ist natürlich auch dabei ;-)

Kommentar von Moritz am 04.04.2007 um 22:50 Uhr


Auf meinem Debian-System habe ich damit schlechte Erfahrungen gemacht: Bei der Installation kommen etliche Fehlermeldungen :-(

Braucht man dafür eine spezielle Version von vim? Ich habe "vim-tiny" und "vim-runtime" installiert.

XML::Twig kann allerdings noch viel mehr, das Pretty-Printing ist eher ein Nebenprodukt :-)

Kommentar von Uwe am 04.04.2007 um 23:15 Uhr


Ich habe auch Debian (Etch), und bei mir klappt das Problemlos, habe aber vim statt vim-tiny installiert.

Ich habe mir mit 'dh-make-perl --build --cpan Text::VimColor' ein Debian-Paket gebaut und mit dpkg installiert, klappt einwandfrei ;-)

Kommentar von Moritz am 05.04.2007 um 11:23 Uhr


Danke für den Tipp: vim statt vim-tiny und schon geht es :-)

Nutzt Du Text::VimColor für Deine Blogs?

Kommentar von Uwe am 05.04.2007 um 13:51 Uhr


Hmmm ... wo wir eh gerade mal wieder bei dem leidigen Thema XML sind *g*

Womit parsen?
Womit generieren?

Habt ihr da nen gutes Howto an der Hand?

Danke :)

Kommentar von Sadrak am 11.04.2007 um 09:34 Uhr


Wieso "leidiges Thema"? :-)

Meine XML-Dokumente sind relativ klein, sie passen also problemlos in den Speicher. Deshalb bevorzuge ich das Umwandeln in eine Perl-Datenstruktur und bearbeite dann diese. Geeignete Module dafür sind XML::Simple und XML::Twig.

Diese Module sind auch für das Generieren geeignet.

Ein neues Modul für die XML-Verarbeitung ist XML::Compile von Mark Overmeer. Das eignet sich vor allem dann, wenn Du ein XML-Schema vorliegen hast. Damit kannst Du Dir einen Parser und Writer erzeugen.

Kommentar von Uwe am 11.04.2007 um 11:16 Uhr


Kommentar abgeben