在xml-twig中使用parse来解析xml字符串有什么限制

时间:2012-10-22 19:50:34

标签: perl xml-twig

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

2 个答案:

答案 0 :(得分:0)

来自documentation

  

解析($ source)

     

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

答案 1 :(得分:0)

我对在处理程序末尾使用$twig->purge感到困惑。执行此操作时,您将丢失刚构建的所有结构。我认为你确实创造了id,但是当你清除树枝时你会松开它们。

你应该删除对purge的调用并在classes上添加一个处理程序,它将使用twig作为你需要使用它的任何东西,然后在你完成后清除它用它。