use 5.010; use strict; use warnings; use XML::LibXML; my $parser = XML::LibXML->new(); my $doc = $parser->parse_string(<<"EOM")->documentElement; 11.22.3333 Max Mustermann EOM sub walk { my ($node, $stack) = @_; my @children = $node->findnodes("*"); for my $child (@children) { if (ref ($child) eq "XML::LibXML::Element") { walk($child, [@$stack, $node->nodeName]) } } unless (@children) { say join "/", @$stack, $node->nodeName } } walk($doc, []);