3

我正在尝试在 xdp 文件的末尾附加时间戳。我正在使用XML::Twig。在运行脚本时,时间戳 ( <testing>4619314911532861</testing>) 会在末尾添加,但输出会出现在 STDOUT 而不是testdata.xdp. 我错过了什么?

代码:

#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;

my $twig=XML::Twig->new(pretty_print => 'indented');
my $file = 'testdata.xdp';
$twig->parsefile_inplace($file, '.bak');
my $root= $twig->root;
my @children= $root->children;

foreach my $child (@children){
    my $eblg= new XML::Twig::Elt( 'testing', localtime);
    $eblg->paste( 'last_child', $child);
}

$twig->flush; 
4

1 回答 1

5

这里的问题是 -parsefile_inplace作为一个独立的东西工作。parse它在操作完成后立即替换源文件。

因此,要这样使用它,您需要在twig_handlers. 如果你这样做,它将解析/修改/覆盖。

例如:

sub insert_after_all {
    my ( $twig, $element ) = @_;
    my $eblg= new XML::Twig::Elt( 'testing', localtime);
    $eblg->paste( 'last_child', $element);
    $twig -> flush;
}

my $twig =  XML::Twig->new(pretty_print => 'indented', 
                      twig_handlers => { '_all_' => \&insert_after_all } );
 my $file = 'testdata.xdp';
 $twig->parsefile_inplace($file, '.bak');

否则 - 重命名源,并且print {$new_fh} $twig -> sprint;

于 2015-10-14T10:33:15.243 回答