Perl - XML ​​печатает значения из хеш-структуры - PullRequest
0 голосов
/ 26 июня 2018

Код ниже является частью структуры 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 

    }
}

1 Ответ

0 голосов
/ 26 июня 2018

Ниже будет напечатан весь ваш хэш. Вы можете изменить код для печати того, что вас интересует:

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";
                            }
                        }
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...