PerlでXMLの処理をしたいのですが、以下のようなXMLをどのようにしたら値が取れるのでしょうか?

できれば、Person->Name{'A'}->Seiseki->Englishで50が取得できるような
直感的な方法がうれしいです。

<Person>
<Name>A</Name>
<Age>29</Age>
<Sex>M</Sex>
<Seiseki>
<English>50</English>
<Math>60</Math>
<Gymnastic>10</Gymnastic>
</Seiseki>

<Name>B</Name>
<Age>32</Age>
<Sex>F</Sex>
<Seiseki>
<English>60</English>
<Math>40</Math>
<Gymnastic>50</Gymnastic>
</Seiseki>

</Person>

A 回答 (1件)

http://weeeblog.net/logs/2008/04/04_1632.php
XML::Simpleを使えばできます。
・・・がデータ構造的にbazaxさんの言うようにはできません(あとPerlの文法的にも難しいと思います)

bazaxさんの提示したXMLをprint Dumperしてみると次のようになりました。
----------------------------------
$VAR1 = {
'Age' => [
'29',
'32'
],
'Seiseki' => [
{
'Math' => '60',
'English' => '50',
'Gymnastic' => '10'
},
{
'Math' => '40',
'English' => '60',
'Gymnastic' => '50'
}
],
'Sex' => [
'M',
'F'
],
'Name' => [
'A',
'B'
]
};
----------------------------------

このようにAとBの結果が混ざってしまいます。
データ構造を

----------------------------------
<Person>
<A>
<Age>29</Age>
<Sex>M</Sex>
<Seiseki>
<English>50</English>
<Math>60</Math>
<Gymnastic>10</Gymnastic>
</Seiseki>
</A>

<B>
<Age>32</Age>
<Sex>F</Sex>
<Seiseki>
<English>60</English>
<Math>40</Math>
<Gymnastic>50</Gymnastic>
</Seiseki>
</B>
</Person>

----------------------------------

のように変えれば

----------------------------------
$VAR1 = {
'A' => {
'Age' => '29',
'Seiseki' => {
'Math' => '60',
'English' => '50',
'Gymnastic' => '10'
},
'Sex' => 'M'
},
'B' => {
'Age' => '32',
'Seiseki' => {
'Math' => '40',
'English' => '60',
'Gymnastic' => '50'
},
'Sex' => 'F'
}
};
----------------------------------

となり、

----------------------------------
my $xml = XMLin($filename);
print $xml->{A}->{Seiseki}->{English} # => 50
----------------------------------

のように値にアクセスできます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報