XML :: LibXML :: Reader возвращает значение без тега cdata - PullRequest
0 голосов
/ 07 ноября 2018

Я читаю XML-файл с XML :: LibXML :: Reader

my $reader = XML::LibXML::Reader->new(IO => $fh, load_ext_dtd => 0) or die qq(cannot read content: $!);

while ($reader->nextElement( 'item' )) {

    my $copy = $reader->copyCurrentNode(1);

    my $title = $copy->findvalue( 'title' );  

}

Однако заголовок в xml находится внутри тега CDATA, поэтому, если я посмотрю на него, он будет похож на

<![CDATA[Some title here]]>

Естественно, я мог бы использовать некоторые регулярные выражения, чтобы избавиться от лишних тегов, но мне интересно, есть ли более чистый способ для XML :: LibXML :: reader вернуть заголовок без тегов cdata?

Я просматривал документы, но не могу найти ссылки на способ сделать это.

1 Ответ

0 голосов
/ 07 ноября 2018

Задача парсера - декодировать XML для вас, поэтому findvalue уже возвращает то, что вы хотите.

use strict;
use warnings;
use feature qw( say );

use XML::LibXML::Reader qw( );

my $xml = '<root><item><title><![CDATA[Some title here]]></title></item></root>';

my $reader = XML::LibXML::Reader->new(string => $xml, load_ext_dtd => 0);
while ($reader->nextElement( 'item' )) {
    my $copy = $reader->copyCurrentNode(1);
    my $title = $copy->findvalue( 'title' );
    say $title;       # Some title here
}
...