Я как-то застрял и стучал головой. Мне нужно удалить нежелательные TRADES из огромного XML-файла.XML :: TWIG для фильтрации XML в PERL
<TRADEEXT>
<TRADE origin = 1,version =1>
<EVENT externtype ='PROC'/>
<EVENT externtype ='PROCC'/>
</TRADE>
<TRADE origin = 1,version =1>
<EVENT externtype ='PROCC'/>
</TRADE>
</TRADEEXT>
Теперь, вторая ТОРГОВЛЯ оказывает externtype = внутренний узел 'PROCC', который не является законным (легитимным значение 'PROC')
Следовательно, конечный результат должен быть
<TRADEEXT>
<TRADE origin = 1,version =1>
<EVENT externtype ='PROC'/>
<EVENT externtype ='PROCC'/>
</TRADE>
<TRADEEXT>
который должен быть вставлен в новый файл. Наиболее важным моментом, который следует отметить здесь, является то, что одно СОБЫТИЕ имеет незаконную ценность, поскольку другое EVENT имеет законную ценность, TRADE становится законным. Таким образом, по крайней мере, один EVENT должен быть законным и что будет делать всю торговлю легитимной Моего кода
use strict;
use warnings;
use XML::Twig;
my $twig = new XML::Twig(twig_handlers => { TRADE => \&TRADE });
$twig->parsefile('1513.xml');
$twig->set_pretty_print('indented');
$twig->print_to_file('out.xml');
sub TRADE {
my ($twig, $TRADE) = @_;
foreach my $c ($TRADE->children('EVENT'))
{
$c->cut($TRADE) unless
$c->att('eventtype') eq "PROC"
;
}
}
К сожалению, это удаление EVENT тега вместо ТОРГОВЫЙ тегу.
Подсказка будет оценена по достоинству.
Пожалуйста, разместите хорошо сформированный XML. – toolic
извините ... будет иметь в виду в будущем –