29 Stimmen

Wie kann ich XML aus Perl erstellen?

Ich muss XML in Perl erstellen. Aus dem, was ich gelesen habe, ist XML::LibXML großartig zum Parsen und Verwenden von XML, das von anderswo stammt. Hat jemand Vorschläge für einen XML-Writer? Wird XML::Writer noch gepflegt? Gefällt es jemandem oder wird es verwendet?

Neben der Funktionsvollständigkeit interessiere ich mich für eine benutzerfreundliche Syntax. Bitte beschreiben Sie die Syntax und andere Gründe, warum Sie dieses Modul in Ihrer Antwort mögen.

Bitte antworten Sie mit einem Vorschlag pro Antwort, und wenn jemand bereits mit Ihrem Favoriten geantwortet hat, stimmen Sie für diese Antwort. Hoffentlich wird es leicht sein zu erkennen, was am beliebtesten ist.

Danke!

37voto

Cosimo Punkte 2716

Nur zur Kenntnisnahme, hier ist ein Codeausschnitt, der XML::LibXML verwendet.

#!/usr/bin/env perl

#
# Erstelle ein einfaches XML-Dokument
#

use strict;
use warnings;
use XML::LibXML;

my $doc = XML::LibXML::Document->new('1.0', 'utf-8');

my $root = $doc->createElement('my-root-element');
$root->setAttribute('some-attr' => 'some-value');

my %tags = (
    color => 'blue',
    metal => 'steel',
);

for my $name (keys %tags) {
    my $tag = $doc->createElement($name);
    my $value = $tags{$name};
    $tag->appendTextNode($value);
    $root->appendChild($tag);
}

$doc->setDocumentElement($root);
print $doc->toString();

und dies gibt aus:

    blue
    steel

22voto

Yanick Punkte 1242

XML::Writer wird immer noch gewartet (zumindest, Stand Februar dieses Jahres), und es ist tatsächlich einer der beliebtesten Perl XML-Schreiber da draußen.

Was die Beschreibung der Syntax betrifft, ist es besser, sich die Dokumentation des Moduls anzusehen (der Link ist bereits in der Frage enthalten). Nämlich:

use XML::Writer;

my $writer = new XML::Writer();  # wird auf stdout schreiben
$writer->startTag("greeting", 
                  "class" => "simple");
$writer->characters("Hallo, Welt!");
$writer->endTag("greeting");
$writer->end();

# erzeugt Hallo, Welt!

9voto

David Precious Punkte 6455

Wenn Sie eine Datenstruktur in Perl nehmen und in XML umwandeln möchten, wird XML::Simple die Arbeit gut erledigen.

Es ist am einfachsten:

my $hashref = { foo => 'bar', baz => \[ 1, 2, 3 \] };
use XML::Simple;
my $xml = XML::Simple::XMLout($hashref);

Wie der Name schon sagt, ist die grundlegende Verwendung einfach; es bietet jedoch viele Funktionen, wenn Sie sie benötigen.

Natürlich kann es auch XML einfach analysieren.

8voto

Matt Siegman Punkte 155

Ich mache nicht viel XML, aber XML::Smart sieht so aus, als könnte es das tun, was du willst. Schau dir den Abschnitt Erstellen von XML-Daten in der Dokumentation an, es scheint sehr einfach und benutzerfreundlich zu sein.

Die Dokumentation umschrieben:

use XML::Smart;

## Erstellen eines leeren XML-Objekts:
my $XML = XML::Smart->new() ;

## Füge einen Server zur Liste hinzu:
$XML->{server} = {
    os => 'Linux' ,
    type => 'mandrake' ,
    version => 8.9 ,
    address => [ '192.168.3.201', '192.168.3.202' ] ,
} ;

$XML->save('neueDatei.xml') ;

Das würde dies in neueDatei.xml speichern:

  192.168.3.201
  192.168.3.202

Cool. Ich werde damit herumspielen müssen :)

2voto

Bill Turner Punkte 3661

XML::Smart sieht gut aus, aber ich erinnere mich nicht daran, dass es verfügbar war, als ich vor vielen Jahren XML::Simple benutzt habe. Schöne Benutzeroberfläche und funktioniert gut zum Lesen und Schreiben von XML.

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