1

ルート要素タグが<__>(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);
4

1 に答える 1

1

XML::Twig のどのバージョンを使用していますか? これは、バージョン 3.38 で修正されたバグです。

変更ファイルから:

version 3.38
date: 2011-02-27
# minor maintenance release
fixed: RT 65865: _ should be allowed at the start on an XML name
       https://rt.cpan.org/Ticket/Display.html?id=65865
       reported by Steve Prokopowich

実際、コードの値として「__」を使用すると$xpath、エラーなしで実行され、正しい出力が得られます。

于 2013-08-31T07:26:56.000 に答える