【Perl】 XMLを使ってみよう

XML::Simpleモジュール

XMLデータの読み込み
XML::Simpleモジュールの XMLin() を使用します。

use XML::Simple;  # XML::Simpleモジュールの読み込み

my $rData = XMLin('./test.xml'); # XMLデータ読み込み & リファレンス受け

PerlでXMLを使う:(1)まずは使ってみる

 

XMLの読み込み

・1次元データ

person.xml

<person>
 <name>Taro YAMAMOTO</name>
 <tel>000-000-0000</tel>
 <email>taro_yamamoto@example.com</email>
</person>

 

person.pl

、、、
use XML::Simple;
、、、
my $rPerson = XMLin('person.xml')
、、、

 

実行すると、XMLデータがハッシュとして読み込まれ、$rPersonにはこのハッシュのリファレンスが入る。
値は以下のようになる。
$$rPerson{name} = Taro YAMAMOTO
$$rPerson{tel} = 000-000-0000
$$rPerson{email} = taro_yamamoto@example.com

 

参考

PerlでXMLを使う:(1)まずは使ってみる

リファレンス - 2部 Perl言語仕様 - [SMART]

 

・2次元データ

<NameList>
  <Member>
   <Name>Ichiro Suzuki</Name>
   <Tel>090-1111-1111</Tel>
   <Mail>itiro@hoge.co.jp</Mail>
  </Member>
  <Member>
   <Name>Jiro Sato</Name>
   <Tel>090-2222-2222</Tel>
   <Mail>jiro@hoge.co.jp</Mail>
  </Member>
  <Member>
   <Name>Sabro Yamada</Name>
   <Tel>090-3333-3333</Tel>
   <Mail>sabro@hoge.co.jp</Mail>
  </Member>
</NameList> 

PerlでXMLを使う:(1)まずは使ってみる

my $rData = XMLin('./test.xml'); # XMLデータ読み込み & リファレンス受け

PerlでXMLを使う:(1)まずは使ってみる

 

実行すると値は以下のようになる。
$$rData{Member}[0]{Name} = Ichiro Suzuki
$$rData{Member}[0]{Tel} = 090-1111-1111
$$rData{Member}[0]{Mail} = itiro@hoge.co.jp
$$rData{Member}[1]{Name} = Jiro Sato
$$rData{Member}[1]{Tel} = 090-2222-2222
$$rData{Member}[1]{Mail} = jiro@hoge.co.jp
$$rData{Member}[2]{Name} = Sabro Yamada
$$rData{Member}[2]{Tel} = 090-3333-3333
$$rData{Member}[2]{Mail} = sabro@hoge.co.jp

 

・属性値

books2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<books>
 <book
  name="分かる Perl"
  author="野村"/>
 <book
  name="Perl これだけ"
  author="砂川"/>
 <book
  name="Perl 図解"
  author="和久井"/>
 <book
  name="最新 Perl"
  author="野村"/>
 <book
  name="Perl 決定版"
  author="和久井"/>
</books>

 

books2.pl

use XML::Simple;
use Data::Dumper;
{
 package Data::Dumper;
 sub qquote { return shift; }
}
$Data::Dumper::Useperl = 1;

use strict;
use warnings;
use utf8;

binmode(STDOUT,":encoding(sjis)");

my $rBooks;
my $ele;
my $ele2;
my @books = ();


$rBooks = XMLin('books2.xml');

print Dumper($rBooks);
print "\n";

foreach my $ele (keys(%{$rBooks})) {
 foreach my $ele2 (keys(%{$rBooks->{$ele}})) {
  print "書名: 『",$ele2,"』\t";
  print "著者名: ",$rBooks->{$ele}->{$ele2}->{author},"\n";
  if ($rBooks->{$ele}->{$ele2}->{author} eq "野村") {
   push(@books, $ele2);
  }
 }
}

print "\n";
print "著者が野村さんの書名: \n";
foreach my $book (@books) {
 print "『$book』\n";
}

 

実行結果

>perl books2.pl
$VAR1 = {
          'book' => {
                      最新 Perl => {
                                   'author' => 野村
                                 },
                      Perl 決定版 => {
                                    'author' => 和久井
                                  },
                      Perl 図解 => {
                                   'author' => 和久井
                                 },
                      Perl これだけ => {
                                     'author' => 砂川
                                   },
                      分かる Perl => {
                                    'author' => 野村
                                  }
                    }
        };

書名: 『最新 Perl』     著者名: 野村
書名: 『Perl 決定版』   著者名: 和久井
書名: 『Perl 図解』     著者名: 和久井
書名: 『Perl これだけ』 著者名: 砂川
書名: 『分かる Perl』   著者名: 野村

著者が野村さんの書名:
『最新 Perl
『分かる Perl

 

参考

foreach my $ele (keys(%{$rMember})) {

PerlでXMLを使う:(1)まずは使ってみる

 

デリファレンス

山口家の逆襲->perl-解説->デリファレンス

 

use Data::Dumper;
{
 package Data::Dumper;
 sub qquote { return shift; }
}
$Data::Dumper::Useperl = 1;

Data::DumperでUTF-8フラグつき文字列をエスケープさせないようにするには - ku

 

binmode(STDOUT,":encoding(sjis)");
実行結果をDOS窓に表示させたい時に使用 

hizumi - WindowsでPerl 5.8/5.10を使うモンじゃない