XML ::在Perl中简单,不检测所有元素

Lee*_*e H 3 xml perl xml-parsing

我正在尝试使用XML :: Simple解析Perl中的一些XML.

XML遵循以下格式:

   <result>
    <doc>
      <field name="title">Sample Title</field>
      <field name="content">Content 1</field>
      <field name="content">Content 2</field>
      .
      .
      .
      <field name="content">Content n</field>
    </doc>
   </result>
Run Code Online (Sandbox Code Playgroud)

使用XML :: Simple我试图解析它并打印标题和所有内容.问题是只打印了最后一个内容项.我决定使用Dumper,这就是它返回的内容:

$VAR1= {
  'result'=> {  
           'doc' => [
                {
                  'field' => {                    
                                'content' => {
                                             'content' => 'Content n'
                                             },
                                'title' => {
                                             'content' => 'Sample Title'
                                           }
                                 }
                      }
Run Code Online (Sandbox Code Playgroud)

仅为每个doc元素显示最后一个内容项.这有什么理由吗?如何让它检测所有内容项?

编辑:这是代码:

my $url = "http://www.testurl.com/test.xml";
my $content = get $url;
die "Couldn't get XML" unless defined $content;

my $xml = new XML::Simple;
my $xmlData = $xml->XMLin($content);
print Dumper($xmlData); 
Run Code Online (Sandbox Code Playgroud)

BRP*_*ock 8

根据POD:

注1:'KeyAttr'的默认值是['name','key','id'].如果您不想在输出上折叠或在输出上展开,则必须将此选项设置为空列表以禁用该功能.

它将"名称"作为ID类型字段并将元素折叠在一起.

 perl -MXML::Simple -MData::Dumper

my $raw = <<XML_SAMPLE;
 <result>
    <doc>
      <field name="title">Sample Title</field>
      <field name="content">Content 1</field>
      <field name="content">Content 2</field>
      .
      .
      .
      <field name="content">Content n</field>
    </doc>
   </result>
XML_SAMPLE

my $xml = new XML::Simple;
my $xmlData = $xml->XMLin($raw, KeyAttr => []);
print Dumper($xmlData);

__END__
$VAR1 = {
          'doc' => {
                   'content' => '
      .
      .
      .
      ',
                   'field' => [
                              {
                                'content' => 'Sample Title',
                                'name' => 'title'
                              },
                              {
                                'content' => 'Content 1',
                                'name' => 'content'
                              },
                              {
                                'content' => 'Content 2',
                                'name' => 'content'
                              },
                              {
                                'content' => 'Content n',
                                'name' => 'content'
                              }
                            ]
                 }
        };
Run Code Online (Sandbox Code Playgroud)