#!/usr/bin/env perl -l use strict; use warnings; use XML::LibXML; my $xml_file = 'pm_1149767_xml_parse.xml'; my $parser = XML::LibXML::->new(); my $doc = $parser->load_xml(location => $xml_file); my $re = qr{%([^%]+)%}; for ($doc->findnodes('//span/text()')) { print $1 while /$re/g; } #### %var% #### %var% #### %PN1% %PN2% %DIMMM%%DIMINCH% %DIMMM% %DIMINCH% %DIMMM%garbage%DIMINCH% %DIMMM%%%DIMINCH% %DIMMM%%%%DIMINCH% #### PN1 PN2 DIMMM DIMINCH DIMMM DIMINCH DIMMM DIMINCH DIMMM DIMINCH DIMMM DIMINCH #### for my $context ($doc->findnodes('//span')) { print $context; for my $text ($context->findnodes('text()')) { print $text; while ($text =~ /$re/g) { print $1; } } } #### %PN1% %PN1% PN1 %PN2% %PN2% PN2 %DIMMM%%DIMINCH% %DIMMM%%DIMINCH% DIMMM DIMINCH %DIMMM% %DIMINCH% %DIMMM% %DIMINCH% DIMMM DIMINCH %DIMMM%garbage%DIMINCH% %DIMMM%garbage%DIMINCH% DIMMM DIMINCH %DIMMM%%%DIMINCH% %DIMMM%%%DIMINCH% DIMMM DIMINCH %DIMMM%%%%DIMINCH% %DIMMM%%%%DIMINCH% DIMMM DIMINCH