#!/usr/bin/perl -w ########################################### # htmlparse - Parse XML with HTML::Parser # Mike Schilli, 2005 (m@perlmeister.com) ########################################### use strict; use HTML::Parser; my $p = HTML::Parser->new( api_version => 3, start_h => [\&start, "tagname, attr"], text_h => [\&text, "dtext" ], xml_mode => 1, ); $p->parse_file("data.xml") or die "Cannot parse"; my $serial; my $artist; ########################################### sub start { ########################################### my($tag, $attrs) = @_; if($tag eq "cd") { $serial = $attrs->{serial}; } $artist = ($tag eq "artist"); } ########################################### sub text { ########################################### my($text) = @_; if($artist and $text eq "Foo Fighters") { print "$serial\n"; } }