CPANモジュール XML::SimpleのXMLoutを利用してハッシュをXMLに変換したいと思っております。
下記ハッシュのデータをXMLoutの引数として利用可能なリファレンス値にする方法をご存知の方
ご教授いただけますと助かります。
ハッシュ
%hash ( "key1" => "data1"
"key2" => "data2"
);
↓ 変換
XMLoutで利用可能なリファレンス値
$hashRef { "key1" => ['data1']
"key2" => ['data2']
}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
指定されたデータに変換する方法が見つからなかったので、作成してみました。
以下の条件であると仮定して作成しています。
- スカラーは配列化する
- 連想配列内の連想配列も対象とする
- 連想配列以外のリファレンスはそのままとする
perl
1use Data::Dumper; 2use XML::Simple; 3use strict; 4use warnings; 5 6# テストデータ 7my $test_data = { 8 test1 => undef, 9 test2 => 'data2', 10 test3 => 'data3', 11 test4 => ['data4'], 12 test5 => { 13 test5_1 => 'data5_1', 14 test5_2 => 'data5_2' 15 }, 16 test6 => { 17 test6_1 => ['data6_1'], 18 test6_2 => ['data6_2'] 19 } 20}; 21print Dumper( _create_xmlout_data($test_data) ); 22print XMLout( _create_xmlout_data($test_data) ); 23 24# 連想配列を展開して、XMLout用データを作成する 25sub _create_xmlout_data { 26 my ($data) = @_; 27 my $res = $data; 28 if ( defined($data) && ref($data) eq 'HASH' ) { 29 30 # 連想配列のリファレンスの場合は 31 # キーごとに調査を行う 32 $res = {}; 33 foreach my $key ( keys( %{$data} ) ) { 34 if ( ref( $data->{$key} ) ) { 35 36 # リファレンスの場合は 37 # 再帰でデータ作成を行う 38 $res->{$key} = _create_xmlout_data( $data->{$key} ); 39 } 40 else { 41 42 # リファレンスで無い場合は 43 # 配列化してデータを格納する 44 $res->{$key} = [ $data->{$key} ]; 45 } 46 } 47 } 48 return $res; 49}
実行結果
$VAR1 = { 'test5' => { 'test5_1' => [ 'data5_1' ], 'test5_2' => [ 'data5_2' ] }, 'test1' => [ undef ], 'test4' => [ 'data4' ], 'test3' => [ 'data3' ], 'test6' => { 'test6_2' => [ 'data6_2' ], 'test6_1' => [ 'data6_1' ] }, 'test2' => [ 'data2' ] }; <opt> <test1></test1> <test2>data2</test2> <test3>data3</test3> <test4>data4</test4> <test5> <test5_1>data5_1</test5_1> <test5_2>data5_2</test5_2> </test5> <test6> <test6_1>data6_1</test6_1> <test6_2>data6_2</test6_2> </test6> </opt>
投稿2017/02/22 07:10
総合スコア148
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。