XML-XSPF
view release on metacpan or search on metacpan
lib/XML/XSPF.pm view on Meta::CPAN
if ($self->trackList) {
$writer->startTag('trackList');
for my $track ($self->trackList) {
$writer->startTag('track');
for my $element (qw(location identifier)) {
for my $cdata (@{$track->get("${element}s")}) {
$writer->dataElement($element, $cdata);
}
}
for my $element (qw(link meta)) {
for my $cdata (@{$track->get("${element}s")}) {
$writer->startTag($element, 'rel' => $cdata->[0]);
$writer->characters($cdata->[1]);
$writer->endTag($element);
}
}
for my $element (qw(title creator annotation info image album trackNum duration)) {
if (my $value = $track->$element) {
$writer->dataElement($element, $value);
}
lib/XML/XSPF.pm view on Meta::CPAN
Carp::confess("Found HTML markup in <$last>\n");
}
}
my $path = $parser->{'_xspf'}->{'path'} .= "/$element";
my $self = $parser->{'_xspf'}->{'self'};
push @{ $parser->{'_xspf'}->{'states'} }, {
'attributes' => \%attributes,
'cdata' => '',
'path' => $path,
};
# Set some default types once we encounter them.
if ($path eq '/playlist/attribution') {
if ($parser->{'_xspf'}->{'attributionCount'}) {
Carp::confess("Too many attribution elements in playlist!\n");
}
lib/XML/XSPF.pm view on Meta::CPAN
$parser->{'_xspf'}->{'track'} = XML::XSPF::Track->new;
}
}
sub handleCharElement {
my ($parser, $value) = @_;
# Keep the our little state machine chugging along
my $state = pop @{ $parser->{'_xspf'}->{'states'} };
$state->{'cdata'} .= $value;
push @{ $parser->{'_xspf'}->{'states'} }, $state;
}
sub handleEndElement {
my ($parser, $element) = @_;
my $state = pop @{ $parser->{'_xspf'}->{'states'} };
my $value = $state->{'cdata'};
my $path = $parser->{'_xspf'}->{'path'};
my $self = $parser->{'_xspf'}->{'self'};
# These are all single value elements.
if ($path eq '/playlist/annotation' ||
$path eq '/playlist/creator' ||
$path eq '/playlist/date' ||
$path eq '/playlist/identifier' ||
$path eq '/playlist/image' ||
( run in 0.222 second using v1.01-cache-2.11-cpan-ec4f86ec37b )