人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlを利用してXMLデータを解析したいと思っています。

対象となるXMLデータは以下のようなデータです

例ここから
<reports>
<item name="fruit" source="01">banana</item>
<item name="fruit" source="02">apple</item>
<item name="fruit" source="03">strawberry</item>
<item name="pc" source="01">Desk</item>
<item name="pc" source="02">Note</item>
</reports>
例ここまで
*例ではname属性の値にはfruitとpcだけですが、実際には色々な値があります。

name属性の指定してitem要素の内容(例でのbananaやNote)やsource属性の値を得したいと思っております
xml解析にはモジュールを利用するのが良いみたいですが、その使い方も良くわかりません。

perlを利用して上記の様に値を取得するプログラムを実際に書いて教えてください。

よろしくお願いします。

●質問者: kuretakajun
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apple BANANA name NOTE pc
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● みねそうた
●35ポイント
#!perl
use XML::Simple;

my $file_name = "data.xml"; # xmlファイル
my $xml = 
XML::Simple->new->XMLin($file_name, KeyAttr=>{"name"});

my $target_name = 'fruit'; # 得たいname属性

for $target ( @{$xml->{item}} ){

if( $target->{name} eq $target_name ){
print $target->{content}, "\n";
}

}

XML::Simple がない場合はインストールしてください。

Perl モジュール XML::Simple の使い方


2 ●
●35ポイント

最近、XPathが流行っていますし、XML::XPathを使う方法はいかがでしょう。

#!/usr/bin/perl

use strict;
use warnings;
use XML::XPath;

my $xml_data = <<EOM;
<reports>
<item name="fruit" source="01">banana</item>
<item name="fruit" source="02">apple</item>
<item name="fruit" source="03">strawberry</item>
<item name="pc" source="01">Desk</item>
<item name="pc" source="02">Note</item>
</reports>
EOM

my $xp = XML::XPath->new(xml=>$xml_data);

# ファイルから読み込む場合は以下のようにする
# my $file = 'sample.xml';
# my $xp = XML::XPath->new(filename=>$file);

my $nodeset = $xp->find('//item[@name="fruit"]');

foreach my $node ($nodeset->get_nodelist) {
 print "NODE : ", XML::XPath::XMLParser::as_string($node), "\n";
 print "VALUE : ", $node->string_value, "\n";
 print "SOURCE : ", $node->find('@source'), "\n";
}

出力は以下のようになります。

NODE : <item name="fruit" source="01">banana</item>
VALUE : banana
SOURCE : 01
NODE : <item name="fruit" source="02">apple</item>
VALUE : apple
SOURCE : 02
NODE : <item name="fruit" source="03">strawberry</item>
VALUE : strawberry
SOURCE : 03
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ