use XML::LibXML; my $parser = XML::LibXML->new(); my $xml = $parser->parse_file( '/path/to/file' ); ## find all .. foreach my $speech ( $xml->findnodes( '/script/speech' ) { .... } ## find all speech by Romeo (assuming: ## Romeo.... ## ) foreach my $romeo_speech ( $xml->findnodes( '/script/speech/[character = "Romeo"]' ) ) { .... } ## etc...