| XML-Atom-Filter documentation | Contained in the XML-Atom-Filter distribution. |
XML::Atom::Filter - easy creation of command line Atom processing tools
Version 0.06
package Uppercaser;
use XML::Atom::Filter;
use base qw( XML::Atom::Filter );
sub entry {
my ($class, $e) = @_;
$e->content(uc $e->content);
}
package main;
Uppercaser->filter;
XML::Atom::Filter supports creation of command line tools to filter and
process Atom feeds.
Creates an instance of the identity filter. XML::Atom::Filter can be used as
a class or an instance.
Reads an Atom feed document and applies the filtering process to it. The Atom
feed is read from $fh, or STDIN if not given. After the feed is read and
parsed, it will be run through the pre, entry (entry by entry), and
post methods.
Prepares to process the entries of the feed, an XML::Atom::Feed object. By
default, no operation is performed.
Processes an entry of the feed, an XML::Atom::Entry object. Returns the new
or modified entry reference, or undef if the entry should be removed from
the filtered feed. By default, no change is made.
If your filter modifies the content of the entry, you must also modify the
entry's id. The Atom feed specification requires entries' id fields to be
universally unique.
Postprocesses the feed, an XML::Atom::Feed object, after the entries are
individually processed. By default, the feed's XML is printed to STDOUT.
Mark Paschal, <markpasc@markpasc.org>
Please report any bugs or feature requests to
bug-xml-atom-filter@rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Atom-Filter.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
Copyright 2005-2006 Mark Paschal, All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| XML-Atom-Filter documentation | Contained in the XML-Atom-Filter distribution. |
package XML::Atom::Filter; use warnings; use strict;
our $VERSION = '0.07';
package XML::Atom::Filter; use XML::Atom; use XML::Atom::Feed;
sub new { my $class = shift; return bless {}, $class; }
sub filter { my ($self, $fh) = @_; my $feed = XML::Atom::Feed->new($fh || \*STDIN) or die XML::Atom::Feed->errstr; $self->pre($feed); my @entries = $feed->entries; @entries = grep { $_ } map { $self->entry($_) } @entries; ## Remove existing entries so we can add back the processed ones without duplication. my @entryNodes; if(*XML::Atom::LIBXML) { @entryNodes = $feed->elem->getElementsByTagNameNS($feed->ns, 'entry') or return; } else { for my $el ($feed->elem->getDocumentElement->childNodes) { push @entryNodes, $el if $el->getName eq 'entry'; }; } $_->parentNode->removeChild($_) for @entryNodes; $feed->add_entry($_) for @entries; $self->post($feed); }
sub pre { 1; }
sub entry { $_[1]; }
sub post { print STDOUT $_[1]->as_xml; }
1; # End of XML::Atom::Filter