1

我正在尝试使用 $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;
 }
4

2 回答 2

0

文档中:

解析 ($source)

$source 参数应该是一个包含整个 XML 文档的字符串,或者它应该是一个开放的 IO::Handle(又名文件句柄)。

于 2012-10-22T21:54:57.563 回答
0

$twig->purge我对处理程序末尾的使用感到困惑。当你这样做时,你会失去你刚刚建立的所有结构。我认为您确实创建了 id,但是当您清除树枝时会丢失它们。

您可能应该删除对 的调用purge并添加一个处理程序classes,该处理程序将使用树枝来完成您需要使用的任何事情,然后在完成后将其清除。

于 2012-10-23T04:10:38.400 回答