анализ perl xml - PullRequest
       1

анализ perl xml

1 голос
/ 18 апреля 2011

Я новичок в Perl, и мне нужна помощь в разборе XML с использованием Perl.

Рассмотрим следующее как мой XML-файл

<A>
    <B1>
    </B1>
    <B2>
    </B2>
    <B3>
        <c1>
        </c1>
        <c2>
        </c2>
        <c3>
        </c3>

    </B3>
</A>

Мне нужно извлечь элемент B3 отдельно вместе сэто дочерние узлы.

Я использую XML: Simple для анализа XML-файла.

Как разобрать элемент B3 отдельно в переменную, чтобы я мог использовать foreach для извлечения дочерних узлов.....?

Заранее спасибо ... !!

Ответы [ 3 ]

4 голосов
/ 18 апреля 2011

XML :: Simple создаст хеш-объект, вы можете затем перебрать его.Помните, что вложенные узлы также будут хеш-объектами.

#!/usr/bin/perl
use XML::Simple;
#use Data::Dumper; # Not necessary 

$xml = new XML::Simple;

$data = $xml->XMLin('test.xml');


$b3 = $data->{B3};

while ( my ($key, $value) = each(%$b3) ) {
    print "$key => $value\n";
}
3 голосов
/ 18 апреля 2011

Вы можете легко понять такие вещи, выполнив:

perl -MData::Dumper -MXML::Simple -e 'print Dumper XMLin("-")' < /tmp/file.xml

При этом вы видите, что можете:

use XML::Simple;
my $xml = XMLin("/tmp/file.xml");
my $b3_node = $xml->{B3};

while ( my ($c_key, $c_node) = each %$b3_node ) {
    ... do your stuff here
}
0 голосов
/ 19 апреля 2011

Если вы получаете массив в качестве результата, то узлы первого уровня, вероятно, имеют тот же тег;что-то вроде

<A>
  <B>
    B1 data  
  </B>
  <B>
    B2 data
  </B>
  <B>
    B2 data
  </B>
</A>

, для которого вы можете получить доступ к данным как $ data -> {B} [0], $ data -> {B} [1] и $ data -> {B} [2].

Если вам нужна дополнительная помощь в решении вашей конкретной проблемы, вам придется опубликовать фактические данные или что-то очень близкое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...