| use XML::Parser; $xml = "<z>\n<a>one two</a>\n<b>three <b1>four</b1></b>\n</z>"; $p = new XML::Parser(Handlers => { Char => \&Text }); $p->parse($xml); sub Text { my $expat = shift; my $text = shift; if ($text =~ /one/) { my $l = $expat->current_line; print "'one' is on line $l\n"; } if ($text =~ /three/) { my $e = $expat->current_element; print "'three' is in the element <$e>\n"; } if ($text =~ /four/) { my $ancestor; print "element stack enclosing 'four': "; foreach $ancestor ($expat->context) { print "<$ancestor> "; } print "\n"; } } 'one' is on line 2 'three' is in the element <b> element stack enclosing 'four': <z> <b> <b1> |