XML::FeedWriter - simple RSS writer


    use XML::FeedWriter;

    # let's create a writer.

    my $writer = XML::FeedWriter->new(

      # specify type/version; RSS 2.0 by default
      version     => '2.0',

      # and channel info
      title       => 'feed title',
      link        => '',
      description => 'blah blah blah',

    # add as many items as you wish (and spec permits).

      # each item should be a hash reference
        title       => 'first post',
        description => 'plain text of the first post',
        link        => '',
        updated     => time(),  # will be converted to a pubDate
        creator     => 'me',  # alias for "dc:creator"
        title       => 'second post',
        description => '<p>html of the second post</p>',
        link        => '',
        pubdate     => DateTime->now, # will be formatted properly
        creator     => 'someone',

    # this will close several tags such as root 'rss'.


    # then, if you want to save the feed to a file


    # or just use it as an xml string.

    my $string = $writer->as_string;


This is yet another simple feed writer. Not for parsing. Just to write. And as of 0.01, it only can write an RSS 2.0 feed. Then, what's the point?

XML::RSS does almost fine. But when you pass it a long html for description, you'll see a lot of &#x3C and the likes. I don't like that.

XML::FeedWriter also converts date/time information to a required format. You don't need to prepare a properly formatted date/time string by yourself.

And I'm too lazy to specify well-known modules or their namespaces again and again. Several aliases are provided such as 'creator' => 'dc:creator'.

In short, if you want completeness, use XML::RSS (or XML::Feed in that sense). If you're lazy, XML::FeedWriter may be a good option.



Creates a writer object (actually, this returns an object of a subordinate class according to the version you specified).

Required (channel) elements may vary in the future but you usually need to specify:


RSS version. As of 0.01, only 2.0 and its aliases are supported, and will be set to 2.0 by default.


Feed title, which should match the name of your website.

URI of your website.


Feed description.

You may specify as many channel elements as you wish.

Some minor elements may require hash/array references to specify extra attributes or child elements. Basically, a hash reference will be considered as child elements, and an array reference will be considered as a value of the elements plus a hash of attributes, but there're exceptions. See appropriate pod for details.

XML::FeedWriter also accepts encoding option ('utf-8' by default) and no_cdata option, if you really care.


Adds items to the feed. Each item should be a hash reference, and characters are expected to be Encode::decoded perl strings.


Closes several known tags such as 'rss' and 'channel'.


Saves the feed to a file. The feed will be Encode::encoded. So, if you really want to use octets while adding items, avoid this and save the result of as_string by yourself.


Returns the feed as a string. This is supposed to be a (Encode::decoded) perl string but actually this doesn't care if the string is flagged or not.



XML::RSS, XML::Feed, XML::Writer


Kenichi Ishigaki, <>


Copyright (C) 2008 by Kenichi Ishigaki.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.