| XML-APML documentation | Contained in the XML-APML distribution. |
XML::APML::Source - Source markup.
my $explicit_source = XML::APML::Source->new;
$explicit_source->key('http://feeds.feedburner.com/apmlspec');
$explicit_source->value(1.00);
$explicit_source->name('APML.org');
$explicit_source->type('application/rss+xml');
my $implicit_source = XML::APML::Source->new(
key => 'http://feeds.feedburner.com/apmlspec',
value => 1.00,
from => 'GatheringTool.com',
updated => '2007-03-11T01:55:00Z',
name => 'APML.org',
type => 'application/rss+xml',
);
$implicit_source->add_author($author);
foreach my $author ($implicit_source->authors) {
print $author->key;
}
Class that represents Source mark-up for APML.
| XML-APML documentation | Contained in the XML-APML distribution. |
package XML::APML::Source; use strict; use warnings; use base 'XML::APML::Node'; __PACKAGE__->mk_accessors(qw/name type/); __PACKAGE__->tag_name('Source'); use XML::APML::Author;
sub new { my ($class, %args) = shift; my $self = $class->SUPER::new(%args); $self->{name} = exists $args{name} ? delete $args{name} : undef; $self->{type} = exists $args{type} ? delete $args{type} : undef; $self->{authors} = []; bless $self, $class; }
sub authors { my $self = shift; $self->add_author($_) for @_; return wantarray ? @{ $self->{authors} } : $self->{authors}; }
sub add_author { my ($self, $author) = @_; push @{ $self->{authors} }, $author; } sub parse_node { my ($class, $node, $is_implicit) = @_; my $source = $class->SUPER::parse_node($node, $is_implicit); my @nodes = $node->findnodes('*[local-name()=\'Author\']'); my $name = $node->getAttribute('name'); $source->name($name) if (defined $name && $name ne ''); my $type = $node->getAttribute('type'); $source->type($type) if (defined $type && $type ne ''); $source->add_author(XML::APML::Author->parse_node($_, $is_implicit)) for @nodes; $source; } sub build_dom { my ($self, $doc, $is_implicit) = @_; my $elem = $self->SUPER::build_dom($doc, $is_implicit); my $name = $self->name; Carp::croak(q{source needs its name.}) unless (defined $name && $name ne ''); $elem->setAttribute(name => $name); my $type = $self->type; Carp::croak(q{source needs its type.}) unless (defined $type && $type ne ''); $elem->setAttribute(type => $type); for my $author (@{$self->{authors}}) { my $author_elem = $author->build_dom($doc, $is_implicit); $elem->appendChild($author_elem); } $elem; } 1;