XML :: Twig Parse Hash to twig handler sub

时间:2018-03-22 08:46:37

标签: xml perl xml-twig

您好,

我有以下XML :: Twig代码来打印一些标记信息。但是,不是将数组解析为twig处理程序子,而是需要解析散列。

my $twig = XML::Twig->new(
    pretty_print => 'indented',
    twig_handlers =>{'tag1'=>sub{Modify_tag1_data(@_,\@Array_Vals,\@Array_Types)}}); 


sub Modify_tag1_data{
    my ( $twig, $tag1,$Array_Vals,$Array_Types) = @_;
    #
    $tag1 = $_->att('f');
    if($Array_Vals[$tag1] eq 'f' && $Array_Types[$tag1] eq 'test'){
        print $tag1 . "\n";
    }
}

但是下面的代码,现在包含哈希而不是数组,会出现错误,指出symbo%Hash_Vals需要显式包名,并且变量%Hash_Types也有相同的错误。

my $twig = XML::Twig->new(
    pretty_print => 'indented',
    twig_handlers =>{'tag1'=>sub{Modify_tag1_data(@_,\%Hash_Vals,\%Hash_Types)}}); 


sub Modify_tag1_data{
    my ( $twig, $tag1,$Hash_Vals,$Hash_Types) = @_;
    #
    $tag1 = $_->att('f');
    if($Hash_Vals{$tag1} eq 'f' && $Hash_Types{$tag1} eq 'test'){
        print $tag1 . "\n";
    }
}

有什么问题?

1 个答案:

答案 0 :(得分:2)

这个问题似乎有点误导。如果你得到:“%Hash_Vals需要显式包名称和变量%Hash_Types的相同错误。”

...这意味着您尚未声明这些变量。这与XML::TwigXML解析根本没什么关系。

在你的潜艇中,你也在做一些奇怪的事情 - 我怀疑你没有做你想做的事情:

sub Modify_tag1_data{
    my ( $twig, $tag1,$Hash_Vals,$Hash_Types) = @_;
    #
    $tag1 = $_->att('f');
    if($Hash_Vals{$tag1} eq 'f' && $Hash_Types{$tag1} eq 'test'){
        print $tag1 . "\n";
    }
}

由于您的参数中的$Hash_Vals$Hash_Vals{$tag1}之间的没有连接,除了看起来类似之外。您可能想要$Hash_Vals -> {$tag1},但在不知道%Hash_Vals实际包含的内容的情况下很难说出来。