如何解析多记录XML文件在Perl中使用XML :: Simple

Nan*_* HE 1 perl xml-simple xml-parsing

我的data.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd country="UK">
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <price>10.0</price>
  </cd>
  <cd country="CHN">
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <price>9.99</price>
  </cd>
  <cd country="USA">
    <title>Hello</title>
    <artist>Say Hello</artist>
    <price>0001</price>
  </cd>
</catalog>
Run Code Online (Sandbox Code Playgroud)

我的test.pl

#!/usr/bin/perl

   # use module
   use XML::Simple;
   use Data::Dumper;

   # create object
   $xml = new XML::Simple;

   # read XML file
   $data = $xml->XMLin("data.xml");

   # access XML data
   print "$data->{cd}->{country}\n";
   print "$data->{cd}->{artist}\n";
   print "$data->{cd}->{price}\n";
   print "$data->{cd}->{title}\n";
Run Code Online (Sandbox Code Playgroud)

输出:

Not a HASH reference at D:\learning\perl\t1.pl line 16.
Run Code Online (Sandbox Code Playgroud)

评论:我用Google搜索并找到了文章(处理单个xml记录). http://www.go4expert.com/forums/showthread.php?t=812 我测试了文章代码,它在我的笔记本电脑上运行良好.

然后我创建了上面的练习代码以尝试访问多个记录.但失败了.我该如何解决?谢谢.

Eva*_*oll 5

永远use strict;,永远use warnings;不要像你一样引用复杂的引用.你是对的use Dumper;,它本应该向你展示那cd是一个数组引用 - 你必须具体哪个cd.

#!/usr/bin/perl
use strict;
use warnings;

# use module
use XML::Simple;
use Data::Dumper;

# create object
my $xml = new XML::Simple;

# read XML file
my $data = $xml->XMLin("file.xml");

# access XML data
print $data->{cd}[0]{country};
print $data->{cd}[0]{artist};
print $data->{cd}[0]{price};
print $data->{cd}[0]{title};
Run Code Online (Sandbox Code Playgroud)