我有以下XML:
<TRADEEXT>
<TRADE att="err" att1="2">
<val_1 att_01="13"/>
<TRADE att="err1" att1="2">
<val_1 att_01="13"/>
</TRADE>
</TRADE>
<TRADE att="err12" att1="211">
<val_1 att_01="131"/>
<TRADE att="err11" att1="21">
<val_1 att_01="13"/>
</TRADE>
</TRADE>
</TRADEEXT>
要求非常简单。需要删除所有子交易
因此所需的输出必须是:
<TRADEEXT>
<TRADE att="err" att1="2">
<val_1 att_01="13"/>
</TRADE>
<TRADE att="err12" att1="211">
<val_1 att_01="131"/>
</TRADE>
</TRADEEXT>
可以看出,没有剩下的子交易。
以下是我写过的代码。
#!/usr/bin/perl
use warnings;
use strict;
use XML::Twig;
use XML::Twig;
my $twig = new XML::Twig(twig_handlers => {'TRADEEXT/TRADE/TRADE' => sub { $_->delete() }});
$twig->parsefile(file_name_1.xml');
$twig->set_pretty_print('indented');
我不知道为什么它不起作用。
答案 0 :(得分:1)
我猜您应该在代码末尾添加$twig->print
。
答案 1 :(得分:-1)
修好了。发表我的回答,以便将来可以帮助别人。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig = new XML::Twig( twig_handlers => { 'TRADE/TRADE' => \&TRADE } );
$twig->parsefile('FILE_NAME_1.xml');
$twig->set_pretty_print('indented');
$twig->print_to_file('out.xml');
sub TRADE {
my ( $twig, $TRADE ) = @_;
foreach my $c ($TRADE)
{
$c->delete($TRADE)
;
}
}