web-dev-qa-db-ja.com

PerlからXMLを作成するにはどうすればよいですか?

PerlでXMLを作成する必要があります。私が読んだところによると、 XML :: LibXML は、他の場所からのXMLを解析して使用するのに最適です。 XMLライターについて何か提案はありますか? XML :: Writer はまだ維持されていますか?誰かがそれを好き/使用していますか?

機能の完全性に加えて、使いやすい構文に興味があるので、構文と、そのモジュールが好きな理由を答えに説明してください。

回答ごとに1つの提案で返信してください。誰かがすでにあなたのお気に入りで回答している場合は、その回答に投票してください。うまくいけば、最も人気のあるものを簡単に確認できます。

ありがとう!

26
pkaeding

XML :: Writerはまだ維持されており(少なくとも今年の2月の時点で)、実際にそこにあるお気に入りのPerlXMLライターの1つです。

構文の説明については、モジュールのドキュメントを参照することをお勧めします(リンクはすでに問題になっています)。ウィットに:

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
Yanick

念のため、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>
31
Cosimo

Perlでデータ構造を取得してXMLに変換する場合は、 XML :: Simple でうまく機能します。

最も単純なもの:

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

その名前が示すように、その基本的な使用法は単純です。ただし、必要に応じて多くの機能を提供します。

もちろん、XMLを簡単に解析することもできます。

10
David Precious

私はあまり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>

涼しい。私はこれで遊ぶ必要があります:)

8
Matt Siegman

XML :: Smartは見栄えが良いですが、何年も前に XML :: Simple を使用していたときに利用可能だったのを覚えていません。優れたインターフェイスであり、XMLの読み取りと書き込みに適しています。

3
Bill Turner

私は XML :: TreeBuilder が好きです。なぜなら、それは私の考えに合っているからです。歴史的に、私はそれを放出よりも構文解析に使用してきました。

この質問が投稿されてから数週間後、PerlからXMLを生成する機会がありました。ここにリストされている他のモジュールを調査しました。そのうちの1つがXML :: TreeBuilderよりもうまく機能すると仮定しましたが、それでもTreeBuilderが私が望んでいたものに最適な選択でした。

1つの欠点は、XML :: TreeBuilderオブジェクトで処理命令と宣言を表す方法がないことでした。

1
skiphoppy