1

私はそれを正しく使用していないと確信しています、私のコード:

#!/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の編集をまったく避けてください。

4

3 に答える 3

4

使用するparsefile_inplaceと、ファイルはいずれにせよ上書きされます。

flushファイルを作成するか、必要に応じて新しいファイルの作成を自分で管理する必要があります。

のコードをXML::Twigベースとして使用できます。

于 2013-03-09T11:00:51.620 に答える
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;
}
于 2013-03-09T11:04:54.187 に答える
0

_pitemの最後に、次のことを行う必要があります

$_->flush;
于 2013-03-09T10:01:06.857 に答える