【发布时间】:2012-10-22 19:50:34
【问题描述】:
我正在尝试使用 $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;
}
【问题讨论】:
-
“不起作用”是什么意思?预期的结果是什么?
-
预计会在每个元素“id = 1”等中看到新属性。如果我在 xml 文件上使用 parsefile 但如果我在字符串上使用 parse 则不行。猜猜我的问题是我尝试解析的字符串是否有效,如 Test::Class 字符串示例中所示。