Использование XPath:
for my $text_node ($node->findnodes('text()')) {
say $text_node;
}
Без использования XPath:
for my $child_node ($node->childNodes()) {
next if $child_node->nodeType != XML_TEXT_NODE;
say $child_node;
}
Оба выдают следующее:
content 1 of p
content 2 of p
Остальная часть программы:
use strict;
use warnings;
use feature qw( say );
use XML::LibXML qw( XML_TEXT_NODE );
my $xml = '<p>content 1 of p <span>content of span</span> content 2 of p </p>';
my $doc = XML::LibXML->new->parse_string($xml);
my $node = $doc->documentElement();