$twig->parse($xmlstring) を使用して、文字列内のすべての xml 要素に id 属性を追加しようとしています。各文字列は、次のような配列の要素です。
<classes name="Test::Class">
<public_methods>
<members const="no" kind="function" name="RegisterDefinition" volatile="no">
<parameters declaration_name="name" type="std::string"/>
<parameters declaration_name="description" type="std::string"/>
</members>
</public_methods>
</classes>
スクリプトでは、foreach ループを使用して各要素を取得し、id 属性を作成します。
foreach my $str (@newonly) {
$twig->parse( $str );
}
ルーチンを呼び出す twig オブジェクトと TwigHandler を作成し、parsefile を使用して xml ファイルを指定した場合にのみ機能します。parse を使用して、配列の要素である xml ファイルの一部を解析すると機能しません。私が使用しているルーチンは次のとおりです。
my $twig = XML::Twig->new(
TwigHandlers => {
'_all_' => \&add_id,
},
);
sub add_id
{ my($twig, $element)= @_;
$element->set_id($id++);
$twig->purge;
}