Как получить доступ к глубоким данным во вложенной структуре XML в Perl, используя XML :: Simple? - PullRequest
1 голос
/ 22 июня 2009

Я использую XML :: Simple, и у меня есть следующая структура XML в переменной $ xmldata, к которой мне нужно получить доступ через код Perl.

<root>
    <a>sfghs</a>
    <b>agaga</b>
    <c>
       <c1>sgsfs</c1>
       <c2>sgsrsh</c2>
    </c>
    <d>
        <d1>agaga</d1>
        <d2>asgsg</d2>
    </d>
</root>

Я могу получить доступ к значениям a и b, используя следующий код:

$aval = $xmldata->{a}[0];
$bval = $xmldata->{b}[0] ;

Теперь мой вопрос: как я могу получить значение, скажем, d2?

1 Ответ

5 голосов
/ 22 июня 2009

Учитывая то, что у вас есть выше, я предполагаю, что у вас включен флаг ForceArray. Вложенные ключи хранятся в виде хэшей хэшей с использованием ссылок.

Итак, чтобы получить доступ к 'd2', вам нужно использовать:

my $d2val = $xmldata->{d}[0]->{d2}[0];

(или мои предпочтения)

my $d2val = $xmldata->{d}->[0]->{d2}->[0];

(потому что это делает очевидным различие)

Очевидно, что чем глубже вы идете, тем страшнее это становится. Это одна из причин, по которой я почти всегда предлагаю XML :: LibXML и XPath вместо XML :: Simple. XML :: Simple быстро становится не простым. XML :: Простые документы объясняют, как различные опции могут влиять на этот макет.

Data :: Dumper неоценим, если вы хотите посмотреть, как выкладываются данные.

...