Подтвердить что ты не робот

Как я могу создать XML из Perl?

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

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

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

Спасибо!

4b9b3361

Ответ 1

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>

Ответ 2

Просто для записи, здесь фрагмент, который использует 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>

Ответ 3

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

В самом простейшем:

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

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

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

Ответ 4

Я не делаю много 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>

Круто. Мне придется играть с этим:)

Ответ 5

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

Ответ 6

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

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

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