为什么要在输出中获取两次字符串?

#!/usr/bin/perl
use warnings;
use strict;

use XML::Twig;


my $string = '<cd_catalogue><title>Hello, World!</title></cd_catalogue>';

my $t= XML::Twig->new(  twig_handlers   => { cd_catalogue => \&cd_catalogue, },
            pretty_print => 'indented',
);

$t->parse( $string );


sub cd_catalogue {
    my( $t, $cd_catalogue ) = @_;
    $cd_catalogue->flush;
}


# Output:
#<cd_catalogue>
#  <title>Hello, World!</title>
#</cd_catalogue>
#<cd_catalogue>
#  <title>Hello, World!</title>
#</cd_catalogue>

最佳答案

将Sub更改为使用printpurge而不是flush可以解决问题:

sub cd_catalogue {
    my( $t, $cd_catalogue ) = @_;
    $cd_catalogue->print;
    $cd_catalogue->purge;
}

由于示例的简单性,flush变得混乱,因为cd_catalogue是根节点。如果将数据更改为以下内容:
my $string = '
    <cds>
        <cd_catalogue><title>Hello, World!</title></cd_catalogue>
    </cds>';

或者如果你把你的树枝处理程序改为寻找title
twig_handlers    => { title => \&cd_catalogue }

然后您会发现$cd_catalogue->flush现在可以正常工作了。
/I3AZ/

关于xml - 为什么XML::Twig输出提取的字符串两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2018967/

10-09 16:45
查看更多