首页 > 解决方案 > Perl - 来自哈希结构的 XML 打印值

问题描述

下面的代码是我从中获得的 XML 结构的一部分XML::Simple

我得到很多classfield( classfield_101, classfield_1023, ... ) 并且classfield_101是其中之一。因为classfield_101我希望程序打印'CHECK UNCHECK'到控制台。

my (%ClassDetails) = ();
my %struct = ( 
    'level1' => {
        'classfield' => {
            'classfield_101' => {
                'classfieldvalues' => { 
                    'classfieldvalue' => [ 
                        {'content' => 'CHECK', 'key' => '1254789'}, 
                        {'content' => 'UNCHECK', 'key' => '1987456'}
                    ]   
                },  
                'classfieldname' => 'CHECKCLASS',
                'key' => 'CHECKDETAILS'
            },  
        }   
    },  
);

print Dumper(\%struct);

for my $elem (@{$struct{level1}{classfield}{classfield_101}{classfieldvalues}{classfieldvalue}}) {
    print "$elem->{content} ";
}



#Output
#CHECK UNCHECK

如何遍历每个classfield_id输入%$classfield并打印值?

foreach $classfield_id (keys %$classfield) {
    ## for ex: Looping for classfield_id = classfield_101 from %$classfield
    if ( $classfield->{$classfield_id}->classfieldname eq "CHECKCLASS" ) {

       ### Stuck here --- $ClassDetails{checkuncheck} = How to print 

    }
}

标签: xmlperl

解决方案


下面将打印您的整个哈希。您可以修改代码以打印您感兴趣的任何内容:

foreach my $key (keys %struct) {
    print "$key\n";
    foreach my $key2 (keys %{$struct{$key}}) {
        print "-$key2\n";
        foreach my $key3 (keys %{$struct{$key}->{$key2}}) {
            print "--$key3\n";
            foreach my $key4 (keys %{$struct{$key}->{$key2}->{$key3}}) {
                my $ref = ref $struct{$key}->{$key2}->{$key3}->{$key4};
                if($ref eq '') {
                    print "---$key4 = $struct{$key}->{$key2}->{$key3}->{$key4}\n";
                }
                else {
                    print "---$key4\n";
                    foreach my $key5 (keys %{$struct{$key}->{$key2}->{$key3}->{$key4}}) {
                        print "----$key5\n";
                        foreach my $key6 (@{$struct{$key}->{$key2}->{$key3}->{$key4}->{$key5}}) {
                            foreach my $key7 (keys %{$key6}) {
                                print "-----$key7 = $key6->{$key7}\n";
                            }
                        }
                    }
                }
            }
        }
    }
}

推荐阅读