XML::LibXML::Reader return 没有 cdata 标签的值

XML::LibXML::Reader return value without cdata tag

我正在读取 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 到 return 没有 cdata 标签的标题?

我一直在查看文档,但找不到任何关于执行此操作的方法的参考。

解析器的工作是为您解码 XML,因此 findvalue 已经 returns 您想要的内容。

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
}