Добавление увеличенного атрибута id ко всем элементам
Существует пример XML-Twig, который показывает, как добавить атрибут id с инкрементным значением к указанному элементу. Есть ли простой способ добавить увеличенный идентификатор ко всем элементам.
#!/bin/perl -w
#########################################################################
# #
# This example adds an id to each player #
# It uses the set_id method, by default the id attribute will be 'id' #
# #
#########################################################################
use strict;
use XML::Twig;
my $id="player001";
my $twig= new XML::Twig( twig_handlers => { player => \&player } );
$twig->parsefile( "nba.xml"); # process the twig
$twig->flush;
exit;
sub player
{ my( $twig, $player)= @_;
$player->set_id( $id++);
$twig->flush;
}
1 ответ
Я предполагаю, что когда вы говорите "каждый элемент", вы это имеете в виду. Есть несколько способов сделать это с помощью twig_handlers
, Есть специальный обработчик _all_
, Или, поскольку ключи twig_handler являются выражениями XPath, вы можете использовать *
,
use strict;
use warnings;
use XML::Twig;
my $id="player001";
sub add_id {
my($twig, $element)= @_;
# Only set if not already set
$element->set_id($id++) unless defined $element->id;
$twig->flush;
}
my $twig= new XML::Twig(
twig_handlers => {
# Either one will work.
# '*' => \&add_id,
'_all_' => \&add_id,
},
pretty_print => 'indented',
);
$twig->parsefile(shift); # process the twig
$twig->flush;