- 締切済み
perlとXML::Simpleの使い方
perlを使って、下記のXMLファイルを出力したいです。 <?xml version='1.0' encoding='UTF-8' ?> <member> <No>00001</No> <Product> <ProductSeqNo>0</ProductSeqNo> <ProductName>スマートフォン</ProductName> </Product> <Product> <ProductSeqNo>3</ProductSeqNo> <ProductName>モニタ</ProductName> </Product> <RegistDate>2012/11/29</RegistDate> </member> <Product>タグの部分は、編集情報を設定するため、下記のようにプログラミングしています。 my $p = { member => [ { No => "$id", Product => {}, RegistDate => "$RegistDate" } ] }; my $AddData = { Product => { ProductSeqNo => ["$seqno"], ProductName => ["ProductName"] } }; push(@{$p->{member}}, $AddData); # データを追加 my $x = new XML::Simple; my $xml = $x->XMLout($p, NoAttr=>1, KeepRoot=>1, OutputFile => "$dir/$Details", XMLDecl => "<?xml version='1.0' encoding='UTF-8' ?>"); 上記を動かすと、以下のように出力されます。 <?xml version='1.0' encoding='UTF-8' ?> <member> <No>00001</No> <Product></Product> </member> <member> <Product> <ProductName>ProductName2</ProductName> <ProductSeqNo>1</ProductSeqNo> </Product> </member> 最初のイメージで出力する方法をご存知の方は教えて下さい。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kumoz
- ベストアンサー率64% (120/185)
> push(@{$p->{member}}, $AddData); # データを追加 XML::Simple についてはわかりませんが、上記の push 文を実行後の $p のデータ構造は次のようになります。 $p = { member => [ { No => "$id", Product => {}, RegistDate => "$RegistDate" }, { Product => { ProductSeqNo => ["$seqno"], ProductName => ["ProductName"] } } ] }; 必要なのは member が指す配列に要素を追加することではなく、Product が指す値の中にデータを追加する事だと思います。そのためには Product => {} を Product => [] に変更して、その無名配列の中に ProductSeqNo と ProductName を格納したハッシュを追加してはどうでしょうか。 Product => [], ... push @{$p->{member}->[0]->{Product}}, $AddData->{Product};