В общем, я прочитал много других сообщений и не смог разобраться в этом. Я извлекаю данные из веб-службы, и мне возвращается следующий XML:

$VAR1 = {
    'error'           => 'EndOfResults',
    'model-responses' => {
        'model' => [
            {   
                'attribute' => {
                    'content' => 'wltvbswfc02',
                    'id'      => '0x1006e'
                },
                'mh' => '0x100540'
            },
            {   
                'attribute' => {
                    'content' => 'wltvsutm1ds02',
                    'id'      => '0x1006e'
                },
                'mh' => '0x100c80'
            },
            {   
                'attribute' => {
                    'content' => 'wltvsdora03',
                    'id'      => '0x1006e'
                },
                'mh' => '0x100c49'
            },
            ]

    },
    'throttle'     => '86',
    'total-models' => '86',
    'xmlns'        => 'http://www.ca.com/spectrum/restful/schema/response'
};

Мне нужно вытащить «mh» и «content» и назначить хэш с содержимым в качестве ключа и mh в качестве значения. Мне не удалось получить правильную структуру данных .. Я признателен за любую помощь. Спасибо! Роберт

1
rj reilly 20 Авг 2014 в 20:07
Привет, Роберт, добро пожаловать в SO. Я настоятельно рекомендую не использовать XML::Simple для собственное предложение модуля. Вместо этого, чтобы избежать проблемы XY, вставьте фактический код XML в свой вопрос вместо проанализированной структуры данных, чтобы открыть для себя гораздо лучшие ответы.
 – 
Miller
20 Авг 2014 в 21:48
Миллер: Спасибо! Теперь я это вижу, посмотрю на XML :: libXML и в следующий раз включу соответствующий код. Еще раз спасибо.
 – 
rj reilly
21 Авг 2014 в 00:15

1 ответ

Лучший ответ

Вы уже преобразовали XML в структуру данных Perl, поэтому

use 5.010;
use warnings;
use Data::Dumper;

my $href = {
    "error"           => "EndOfResults",
    "model-responses" => {
        model => [
            {   attribute => { content => "wltvbswfc02", id => "0x1006e" },
                mh        => "0x100540",
            },
            {   attribute => { content => "wltvsutm1ds02", id => "0x1006e" },
                mh        => "0x100c80",
            },
            {   attribute => { content => "wltvsdora03", id => "0x1006e" },
                mh        => "0x100c49",
            },
        ],
    },
    "throttle"     => 86,
    "total-models" => 86,
    "xmlns"        => "http://www.ca.com/spectrum/restful/schema/response",
};

my %res = map { $_->{attribute}{content} => $_->{mh} }
    @{ $href->{"model-responses"}{model} };

say Dumper \%res;

Вышеуказанные отпечатки:

$VAR1 = {
          'wltvsutm1ds02' => '0x100c80',
          'wltvsdora03' => '0x100c49',
          'wltvbswfc02' => '0x100540'
        };
0
Miller 22 Авг 2014 в 01:09