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

27
задан brian d foy 8 January 2010 в 13:21
поделиться

6 ответов

XML:: Писатель все еще сохраняется (по крайней мере, по состоянию на февраль этого года), и это - действительно один из любимого 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>
21
ответ дан chbrown 28 November 2019 в 04:25
поделиться

Если Вы хотите взять структуру данных в Perl и превратить его в XML, XML:: Простой сделает задание приятно.

В его самом простом:

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

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

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

10
ответ дан David Precious 28 November 2019 в 04:25
поделиться

Я не делаю большого количества XML, но XML:: Умный похож на него, мог бы сделать то, что Вы хотите. Смотрите на раздел Данные 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>

Прохладный. Я оказываюсь перед необходимостью играть с этим:)

8
ответ дан Matt Siegman 28 November 2019 в 04:25
поделиться

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

3
ответ дан Bill Turner 28 November 2019 в 04:25
поделиться

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

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

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

1
ответ дан brian d foy 28 November 2019 в 04:25
поделиться

Для записи, вот фрагмент, который использует 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>
32
ответ дан 28 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: