XML::RSS::LibXML can write

| トラックバック(0)




use XML::RSS::LibXML;
my $rss = XML::RSS::LibXML->new;
$rss->parse_file('rss.xml');

print $rss->as_string();


これは前からできたけど、今度はちゃんとRSSを作れるぜ!



my $rss = XML::RSS::LibXML->new(version => '1.0');
$rss->channel(
title => "RSS title",
link => 'http://example.com'
);
... その他いろいろ ...
$rss->save("foo.xml");

一応RSS 1.0ならかなりの制度で $rss2->parse($rss1->as_string) して、$rss1 == $rss2のようにできるはず!


今回一番手こずったのはXMLネームスペース。結果的に作成したいRSSはこういうふうに始まってほしい:




<rdf:RDF</pp>
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
.... other declaration ...
>

最初は



$xml = XML::LibXML::Document->new('1.0', 'UTF-8');
$root = $xml->createElementNS($RDF_NS, 'RDF');
$root->setNamespace($RDF_NS, 'rdf', 1);
$root->setNamespace($DEFAULT_NS. '', 1);

ってやってたんだが、これをやるとxmlns:rdfとxmlns(default)が同じになってしまう。いろいろ試してみてようやくたどり着いたのが



$xml = XML::LibXML::Document->new('1.0', 'UTF-8');
$root = $xml->createElementNS($DEFAULT_NS, 'RDF');
$root->setNamespace($RDF_NS, 'rdf', 1);

なるほど、createElementNS()はXMLノードのデフォルトネームスペースを設定するAPIだったのね・・・。昨日の夜から今朝にかけて2時間半はたっぷり悩みました。とほほ。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ