my $parser = XML::Rules->new( rules => [ _default => 'content', user => sub { return unless $_[1]->{teamid} = $_[4]->{parameters}{teamid}; delete $_[1]->{_content}; # delete the textual context (whitespace) return '@user' => $_[1]; }, users => 'pass no content', ] ); my $users = $parser->parsefile( $the_xml_file, {teamid => 100};