我有一个 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);