我正在尝试使用 $twig->parse($xmlstring) 将 id 属性添加到字符串中的所有 xml 元素。每个字符串都是数组的一个元素,类似于:
<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;
}