2013-11-18 1 views
2

Спасибо, этому форуму я смог успешно написать perl-скрипт для редактирования xml-файла. Но я хотел бы напечатать что-то на экране. Я хотел бы отобразить содержимое xml до и после изменения. Пожалуйста, помогите мне.Как печатать имена элементов с помощью XML :: Twig

Входной XML

<config> 
<match_name>Match_20111010</match_name> 
<teamA>Alpha_2353523</teamA> 
<teamB>Beta_23523523</teamB> 
<result>Win</result> 
</config> 

КОД

#!/usr/bin/perl 
use strict; 
use warnings; 
use XML::Twig; 
my $xml = 'config.xml'; 
my $twig = XML::Twig->new (

    twig_roots => {match => \&edittag, 
        teamA => \&edittag, 
        teamB => \&edittag, 
    }, 
    twig_print_outside_roots => 1, 
    ); 

$twig->parsefile_inplace($xml); 



sub edittag { 
    my ($twig, $tag) = @_; 
    my $text = $tag->text(); 
    $text =~ s/\d+/REPLACED/; 
    $tag->set_text ($text); 
    $twig->flush; 

} 
+0

Какое содержимое вы хотите распечатать, весь файл 'xml'? Я не понимаю, каков ваш ожидаемый результат и каким образом ваш текущий код не работает. – Birei

+0

У меня нет проблем с кодом, я просто хочу напечатать на стандартном экране вывода имя тега xml со значениями в нем до и после изменения. что-то вроде этого. Не знаете, как печатать только тег-имена файла xml с помощью модуля Twig. – chidori

+0

Используйте 'print' внутри подкаталога' edittag'. – toolic

ответ

0

Использование print() функция STDOUT:

$twig->print(\*STDOUT); 

Или напечатать только tag name:

print STDOUT $tag->name; 
+0

Извините, но результат довольно неуклюжий. Есть ли опция в XML :: Twig для извлечения только имени элемента. Я хочу здесь 'print" XML TAG name: значение старого элемента " print" XML TAG name: new element value "' – chidori

+1

@chidori: Как насчет 'print STDOUT $ tag-> name;'? – Birei

+0

Спасибо, что работает. Не могли бы вы объяснить, что означает '\ * STDOUT' и как это отличается от' STDOUT'. – chidori