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

时间:2018-11-07 13:13:33

标签: perl xml-libxml

我正在使用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标签的标题?

我一直在浏览文档,但是找不到任何参考方法。

1 个答案:

答案 0 :(得分:1)

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