我正在尝试使用$ twig-> parse($ xmlstring)将id属性添加到string中的所有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;
}
答案 0 :(得分:0)
解析($ source)
$ source参数应该是包含整个XML文档的字符串,或者它应该是一个开放的IO :: Handle(也称为文件句柄)。
答案 1 :(得分:0)
我对在处理程序末尾使用$twig->purge
感到困惑。执行此操作时,您将丢失刚构建的所有结构。我认为你确实创造了id,但是当你清除树枝时你会松开它们。
你应该删除对purge
的调用并在classes
上添加一个处理程序,它将使用twig作为你需要使用它的任何东西,然后在你完成后清除它用它。