XMLデータツリー生成 - xml_recursive

Last update: 2008/11/14

 関数 xml_recursivexml_contents を再帰的に行い、XMLデータをツリー構造にして返します。ツリーの中で繰り返される要素は配列になります。

# -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
# hash  xml_recursive( xmldata ) 2008/11/03
# -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
sub xml_recursive
{
    my $data = shift; 
    unless(ref $data)
    {
        $data = xml_contents($data); 
        return unless ref $data; 
    }
    for(ref($data) eq "ARRAY" ? @$data : values %$data)
    {
        $_ = xml_contents($_) unless ref $_; 
        xml_recursive($_) if ref $_; 
    }
    return $data; 
}
# XMLデータの完全なツリー構造を出力
use Data::Dumper; 
print Dumper xml_recursive($data); 

# 電脳ウェブサービス(DWS 2.0)で先頭アイテムの名前を出力
$data = xml_recursive($data); 
print $data->{ProductInfo}{Responce}{Details}[0]{ProductName}; 

 xml_contents と同じく、この関数には PHP版もあります。(同様にこちらがオリジナル)

//-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
// xml_recursive(&data) 2008-06-26
//-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
function xml_recursive(& $data)
{
    if(is_scalar($data))
    {
        $data = xml_contents($data); 
        if(is_scalar($data)) 
            return; 
    }
    foreach(array_keys($data) as $key)
    {
        if(is_scalar($data[$key]))
            $data[$key] = xml_contents($data[$key]); 
        if(is_array($data[$key]))
            xml_recursive($data[$key]); 
    }
}

 関数についてお気づきの点などありましたらご連絡くださると幸いです。