#!/usr/bin/perl use strict; use XML::Simple; use Data::Dumper; use CGI qw/:all/; print header('text/html'); print <<__STYLE__ __STYLE__ ; my $tv = XMLin('raw.xml'); # channel names & global channel info - array of hashes # can xref with programs by key: blebid my $chan_names = $tv->{xmltvid}; # generate cross-referencing hash my $chan_names = $tv->{xmltvid}; # generate cross-referencing hash my %xmltvid; foreach my $chan (@$chan_names) { $xmltvid{$chan->{content}} = $chan->{blebid}; } # programs on BBC 1 - ref to array of hashes [example] # my $channel = $tv->{channel}->{$xmltvid{'BBC 1'}}->{programme}; # &all_shows($channel, 'BBC 1'); print "\n"; &all_shows(); print "
\n"; sub all_shows { # my ($chanref, $channame) = @_; print "\n"; foreach my $chan (keys %xmltvid) { print " $chan\n"; } foreach my $hour (0 .. 23) { print "\n\n"; &this_hour($tv, $hour); print "\n\n"; &this_hour($tv, $hour); print "\n"; } } sub this_hour { my ($tvref, $hour) = @_; # print '
', Dumper $tvref, '
'; foreach my $chan (keys %xmltvid) { # my $chan = 'BBC 1'; my $chanref = $tvref->{channel}->{$xmltvid{$chan}}->{programme}; print " "; # print "
", Dumper $chanref, "
\n"; my $i = 0; foreach my $prog (@$chanref) { if (substr($prog->{start}, 0, 2) == $hour) { print '', "
', $prog->{start}, '-', $prog->{end}, '
$prog->{title}", "
"; } } } }