2008年12月3日

Perl的XML Parser XML::Simple (1)

工作上會用到有關XML的東西, 講到資料處理當然是Perl啦, 馬上來survey一下.

cpan提供了一些好用的module, XML::Simple基本上灌完ActivePerl就有內建. 此Module的作者首頁
下面大量翻譯網頁裡的東西, 有興趣可以看看原文.
XML::Simple是一個Perl Module, 主要為了提供一個容易讀寫XML文件的界面. 本來作者是想做一個讀寫XML格式的config檔案. 不過很多人拿去做其他用途(kerker.

Installation:
上面提到很多安裝的方法, 包括用cpan提供的shell啊, 安裝檔啊..不過作者說只要把Simple.pm解壓縮出來放到perl/lib/XML/底下就可以了:)

用法: (原文)

主要使用的function: XMLin; XMLout

一般 format:
use XML::Simple;

my $ref = XMLin([] [, ]);

my $xml = XMLout($hashref [, ]);
用物件導向讓你看不懂的話:
require XML::Simple;

my $xs = XML::Simple->new(options);

my $ref = $xs->XMLin([] [, ]);

my $xml = $xs->XMLout($hashref [, ]);
如果要得到error message, 只要作一些修改
use XML::Simple qw(:strict);

一個簡單的範例:
file name :foo.xml
XML包法:

裡面項目可大量.

perl 程式裡:
use XML::Simple;

my $config = XMLin();

這會產生一個名叫$config的hashref, 因為他沒有設定初值, $config會預設對應到該Script的name跟location.

接下來要將資料吃進來, 使用Data::Dumper把資料弄進去:
use Data::Dumper;

print Dumper($config);
印出來會有如下效果:
{
'logdir' => '/var/log/foo/',
'debugfile' => '/tmp/foo.debug',
'server' => {
'sahara' => {
'osversion' => '2.6',
'osname' => 'solaris',
'address' => [ '10.0.0.101', '10.0.1.101' ]
},
'gobi' => {
'osversion' => '6.5',
'osname' => 'irix',
'address' => '10.0.0.102'
},
'kalahari' => {
'osversion' => '2.0.34',
'osname' => 'linux',
'address' => [ '10.0.0.103', '10.0.1.103' ]
}
}
}
這是hashref裡面包的內容, 記得他是一個物件.
那要怎麼拿裡面的元素呢? 假設我要拿log directory的name
print $config->{logdir};
如果要拿特定的元素, 例如 kalahari Server的第二個Address
print $config->{server}->{kalahari}->{address}->[1];

但程式不會只寫的這麼簡單. 下回待續?

沒有留言: