2013-03-09 3 views
1

Я уверен, что я не использую его правильно, мой код:XML Twig всегда редактирование XML

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

XML::Twig->new(pretty_print => 'indented', 
       twig_handlers => { '//Item[@PartNumber]' => \&_pitem 
            }, 
)->parsefile_inplace('order2.xml', '.bak'); 

sub _pitem { 
    $_->set_text(...) if (....); 
} 

Если нет никаких элементов, соответствующих это выражение XPath в XML, кажется, что XML получается, быть пустым ... он обрезает файл. Мое желаемое поведение: вообще не следует редактировать XML, если никакие элементы не совпадают.

ответ

4

Если вы используете parsefile_inplace, то файл будет переписан в любом случае.

Вам необходимо либо создать файл flush, либо самостоятельно создать файл.

В качестве основы вы можете использовать код от XML::Twig.

1

Вы ничего не написал, что выходов любых XML.

Вы должны использовать twig_roots как это

my $twig = XML::Twig->new(
    twig_roots    => { '//Item[@PartNumber]' => \&_pitem }, 
    twig_print_outside_roots => 1, 
    pretty_print    => 'indented', 
); 

$twig->parsefile_inplace('order2.xml', '.bak'); 

sub _pitem { 
    $_->set_text(...) if (....); 
    $_->print; 
} 

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

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