2015-10-14 6 views
3

Я пытаюсь добавить временную метку в конце xdp-файла. Я использую XML::Twig. При запуске метка времени скрипта (<testing>4619314911532861</testing>) добавляется в конце, но выход поступает на STDOUT вместо testdata.xdp. Что мне не хватает?XML :: Twig - редактирование на месте

Код:

#!/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; 

ответ

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;

+0

Заменено '$ twig-> флеша,' 'с $ twig-> print'. Это также выводило вывод в STDOUT. –

+0

OK. Вы можете проверить версию XML :: Twig? – Sobrique

+0

Это последняя версия версии 3.49. –

 Смежные вопросы

  • Нет связанных вопросов^_^