Как я могу создать XML из Perl? - PullRequest
26 голосов
/ 01 октября 2008

Мне нужно создать XML в Perl. Из того, что я прочитал, XML :: LibXML отлично подходит для анализа и использования XML, который приходит откуда-то еще. У кого-нибудь есть предложения по XML Writer? XML :: Writer все еще поддерживается? Кто-нибудь любит / использует это?

Помимо полной функциональности, меня интересует простой в использовании синтаксис, поэтому, пожалуйста, опишите синтаксис и любые другие причины, по которым вам нравится этот модуль, в своем ответе.

Пожалуйста, ответьте с одним предложением на ответ, и если кто-то уже ответил с вашим любимым, пожалуйста, проголосуйте этот ответ. Надеюсь, будет легко увидеть, что является самым популярным.

Спасибо!

Ответы [ 6 ]

30 голосов
/ 29 мая 2010

Просто для записи, вот фрагмент кода, который использует XML :: LibXML.

#!/usr/bin/env perl

#
# Create a simple XML document
#

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

и это выводит:

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
    <color>blue</color>
    <metal>steel</metal>
</my-root-element>
21 голосов
/ 01 октября 2008

XML :: Writer все еще поддерживается (по крайней мере, по состоянию на февраль этого года), и это действительно один из любимых разработчиков Perl XML.

Что касается описания синтаксиса, лучше взглянуть на документацию модуля (ссылка уже есть в вопросе). Для остроумия:

use XML::Writer;

my $writer = new XML::Writer();  # will write to stdout
$writer->startTag("greeting", 
                  "class" => "simple");
$writer->characters("Hello, world!");
$writer->endTag("greeting");
$writer->end();

# produces <greeting class='simple'>Hello world!</greeting>
10 голосов
/ 01 октября 2008

Если вы хотите взять структуру данных в Perl и превратить ее в XML, XML :: Simple прекрасно выполнит эту работу.

Самое простое:

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

Как следует из названия, его основное использование простое; однако он предлагает множество функций, если они вам нужны.

Естественно, он также может легко анализировать XML.

8 голосов
/ 01 октября 2008

Я не много делаю XML, но XML :: Smart выглядит так, как будто он может делать то, что вы хотите. Взгляните на раздел Создание XML-данных в документе, и он выглядит очень простым и удобным в использовании.

Перефразируя документ:

use XML::Smart;

## Create a null XML object:
my $XML = XML::Smart->new() ;

## Add a server to the list:
$XML->{server} = {
    os => 'Linux' ,
    type => 'mandrake' ,
    version => 8.9 ,
    address => [ '192.168.3.201', '192.168.3.202' ] ,
} ;

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

Что поместит это в newfile.xml:

<server os="Linux" type="mandrake" version="8.9">
  <address>192.168.3.201</address>
  <address>192.168.3.202</address>
</server>

Cool. Я собираюсь поиграть с этим:)

3 голосов
/ 01 октября 2008

XML :: Smart выглядит красиво, но я не помню, чтобы он был доступен, когда я использовал XML :: Simple много лет назад. Хороший интерфейс и хорошо подходит для чтения и записи XML.

1 голос
/ 02 октября 2008

Мне нравится XML :: TreeBuilder , потому что это соответствует моему мнению. Исторически, я использовал это больше для разбора, чем для испускания.

Через несколько недель после того, как этот вопрос был опубликован, у меня была возможность сгенерировать какой-нибудь XML из Perl. Я рассмотрел другие модули, перечисленные здесь, предполагая, что один из них будет работать лучше, чем XML :: TreeBuilder, но TreeBuilder по-прежнему оставался лучшим выбором для того, что я хотел.

Один недостаток заключался в том, что невозможно представить инструкции обработки и объявления в объекте XML :: TreeBuilder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...