perl XML :: LibXML получает содержимое прямого дочернего текстового узла - PullRequest
1 голос
/ 14 октября 2019

Как в этом фрагменте:

<p>content 1 of p <span>content of span</span> content 2 of p </p>

Я хотел бы получить только следующее: content 1 of p и content 2 of p, а не content of span.

Есть ли способсделай это?

1 Ответ

3 голосов
/ 14 октября 2019

Использование 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();
...