Добавление увеличенного атрибута 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;
Другие вопросы по тегам