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
}
我正在读取 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
}