1

$twig->parse($xmlstring) を使用して、文字列内のすべての xml 要素に id 属性を追加しようとしています。各文字列は、次のような配列の要素です。

<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を作成したと思いますが、小枝をパージするとIDが失われます。

おそらく、への呼び出しを削除してpurgeにハンドラーを追加するclasses必要があります。これにより、小枝を使用する必要がある場合に小枝を使用し、使用が終了したらパージします。

于 2012-10-23T04:10:38.400 に答える