XML Twig总是编辑XML

时间:2013-03-09 09:30:42

标签: xml perl xml-twig

我确定我没有正确使用它,我的代码:

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

3 个答案:

答案 0 :(得分:4)

如果您使用parsefile_inplace,则无论如何都会覆盖该文件。

您需要flush文件,或者在必要时自行管理新文件的创建。

您可以使用XML::Twig中的代码作为基础。

答案 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;