我确定我没有正确使用它,我的代码:
#!/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 (....);
}
如果XML中没有与该XPath表达式匹配的元素,那么XML似乎是空的......它会截断文件。 我希望的行为是: 如果没有匹配的元素,则完全避免编辑XML。
答案 0 :(得分:4)
答案 1 :(得分: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;
}
答案 2 :(得分:0)
在_pitem结束时,你必须
$_->flush;