ルート要素タグが<__>
(2 つのアンダースコア) である XML ファイルがあります。ただし、そのタグ名が twig_handlers リスト XML::Twig->new で使用されると、次のエラー メッセージが表示されて終了します。
unrecognized expression in handler: '__'
実際、アンダースコアで始まるすべてのタグは、Twig の特別なタグ_all_
とを除いて、このエラーを生成します_default_
。これらのいずれかを使用して、最後のものを除くすべてのハンドラー コールバックを破棄してファイルを処理できます。
失敗する呼び出しは次のとおりです。
XML::Twig->new (twig_handlers => { '__' => \&show })
ここで使用できる XML::Twig Xpath 式があると思いますが、CPAN のドキュメントでは構文についてかなりあいまいです。また、要素にたどり着くために何をしなければならないのだろうかと思っています<_all_>
:)
誰かに提案があれば、それは大歓迎です。
この問題は小枝が作成されたときにのみ発生します。これは、(コールバック式を使用して_all_
)処理が開始<__>
されると、入力内の任意のレベルの要素が正常に処理されるためです。
誰かが問題を解決したい場合は、解決策を見つけるために使用していたプログラムを次に示します。テストする式に $xpath を設定します。
use strict;
use XML::Twig;
my $xpath = '_all_'; # <---- fails if one puts '__' here
my $xml = <<EOS; # <---- here's the XML data to process
<__>
<AA>first</AA>
<__>second</__>
</__>
EOS
sub show {
print "handler called for element ", $_->gi, ", whose children are\n";
my @children = $_->children;
for my $elt (@children) {
print "\t", $elt->gi, " holds \"", $elt->text, "\"\n";
}
1;
}
my $twig = XML::Twig->new (twig_handlers => { $xpath => \&show });
$twig->parse ($xml);