Perl простой XML-вопрос - PullRequest
       0

Perl простой XML-вопрос

1 голос
/ 05 февраля 2011

Я пытаюсь разобрать созданный мной простой XML-файл ... он выглядит так:

<project name="AU" date="2/2/2011" location="proj1">
  <GenomeList name="Processed">
    <genome name="AU4" />
  </GenomeList>
  <GenomeList name="Unprocessed">
      <genome name="AU1" />
      <genome name="AU2" />
      <genome name="AU3" />
  </GenomeList>
</project>

Проблема, с которой я сталкиваюсь, заключается в разборе списка генома: кажется, что, когда в списке только один элемент, он добавляет запись другим способом, как можно видеть здесь:

'Unprocessed' => {
                  'genome' => {
                              'AU2' => {},
                              'AU3' => {},
                              'AU1' => {}
                              }
                 },
'Processed' => {
                'genome' => {
                            'name' => 'AU4'
                            }
               }

Можно ли как-нибудь заставить его разобраться последовательным образом?

Я пытался использовать valueAttr, но, похоже, он не работал

Спасибо

1 Ответ

5 голосов
/ 06 февраля 2011

Это довольно распространенная проблема с использованием XML :: Simple , поэтому я предполагаю, что это то, что вы используете. ForceArray, вероятно, будет делать то, что вы хотите. Смотрите примеры и результаты ниже; третье утверждение печати должно делать то, что вы хотите. Обратите внимание, что XML :: Simple определенно не прост, когда ваше использование выходит за рамки тривиальных и предсказуемых вещей ввода / вывода. Если вы хотите использовать его, не прекращайте читать документацию со словом «Простой».

XML :: LibXML или, возможно, XML :: Twig также стоит изучить.

use warnings;
use strict;
use XML::Simple;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;

my $multi = <<"";
<project name="AU" date="2/2/2011" location="proj1">
  <GenomeList name="Processed">
    <genome name="AU4" />
  </GenomeList>
  <GenomeList name="Unprocessed">
      <genome name="AU1" />
      <genome name="AU2" />
      <genome name="AU3" />
  </GenomeList>
</project>

my $single = <<"";
<project name="AU" date="2/2/2011" location="proj1">
  <GenomeList name="Processed">
    <genome name="AU4" />
  </GenomeList>
  <GenomeList name="Unprocessed">
      <genome name="AU1" />
  </GenomeList>
</project>

print Dumper( XMLin($multi) );
print Dumper( XMLin($single) );
print Dumper( XMLin( $single, ForceArray => 1 ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...