XML::LibXML::Reader返回不带cdata标记的值



我正在读取一个带有xml::LibXML::Reader 的xml文件

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标记的标题?

我一直在查阅文档,但找不到任何关于如何做到这一点的参考资料。

解析器的工作是为您解码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
}

相关内容

  • 没有找到相关文章

最新更新