Как мне разобрать файл, используя Perl XML :: SAX? - PullRequest
0 голосов
/ 17 сентября 2010

Я пытаюсь XML::SAX парсер для анализа XML-файла.Файл XML показан ниже,

            <message>
                <c1>
                    <rrcConnectionSetupComplete>
                        <rrc-TransactionIdentifier>2</rrc-TransactionIdentifier>
                        <criticalExtensions>
                            <c1>
                                <rrcConnectionSetupComplete-r8>
                                    <selectedPLMN-Identity> 1 </selectedPLMN-Identity>
                                    <dedicatedInfoNAS> 07410109014290112345671000028020000f0 </dedicatedInfoNAS>
                                </rrcConnectionSetupComplete-r8>
                            </c1>
                        </criticalExtensions>
                    </rrcConnectionSetupComplete>
                </c1>
            </message>

Код Perl показан ниже,

use strict;

use XML::SAX;
use MySAXHandler;

my $parser = XML::SAX::ParserFactory->parser(Handler => MySAXHandler->new);

$parser->parse_uri("uL-DCCH-Message.xml");

my $rrc_trans_identifier = $parser->{'c1'}->{'rrcConnectionSetupComplete'}->{'rrc-TransactionIdentifier'};
print "rrc_trans_id :: $rrc_trans_identifier\n";

my $selected_plmn_id = $parser->{c1}->{rrcConnectionSetupComplete}->{criticalExtensions}->{c1}->{'rrcConnectionSetupComplete-r8'}->{'selectedPLMN-Identity'};
print "plmn identity :: $selected_plmn_id\n";

my $rrc_dedicated_info_nas = $parser->{c1}->{rrcConnectionSetupComplete}->{criticalExtensions}->{c1}->{'rrcConnectionSetupComplete-r8'}->{dedicatedInfoNAS};
print "dedicated info nas :: $rrc_dedicated_info_nas\n";

Когда я запускаю этот код, я получаю вывод как,

Can't locate MySAXHandler.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at sax.pl line 4.
BEGIN failed--compilation aborted at sax.pl line 4.

Я установил XML :: SAX из CPAN, но он все еще показывает ошибку отсутствующего модуля.

Мои вопросы:

  1. Нужно ли устанавливать какие-либо другие модули?

  2. Чтобы получить доступ к значениям в файле XML, правильна следующая процедура?

Например:

my $rrc_trans_identifier = $parser->{'c1'}->{'rrcConnectionSetupComplete'}->{'rrc-TransactionIdentifier'};
print "rrc_trans_id :: $rrc_trans_identifier\n";

1 Ответ

3 голосов
/ 17 сентября 2010

Вам нужно написать свой собственный MySAXHandler (подсказка в названии!).

Подробнее см. Документацию SAX :: Intro .

...