Как я могу создать XML из Perl?
Мне нужно создать XML в Perl. Из того, что я читал, XML:: LibXML отлично подходит для разбора и использования XML, который приходит откуда-то еще. Есть ли у кого-нибудь предложения для XML-писателя? XML:: Writer сохраняется? Кто-нибудь любит/использует его?
В дополнение к полнотекстовой функции, мне интересен простой в использовании синтаксис, поэтому, пожалуйста, опишите синтаксис и любые другие причины, по которым вам нравится этот модуль в вашем ответе.
Пожалуйста, ответьте одним предложением за ответ, и если кто-то уже ответил вашим любимым, проголосуйте за этот ответ. Надеюсь, будет легко увидеть, что наиболее популярно.
Спасибо!
Ответы
Ответ 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.