Convert a Perl Hash of Hashes into XML with XML::Dumper

Posted by: gdelmatto  :  Category: Perl, Programming

For a project of mine, I wanted to convert a Perl data structure, a so called Hash of Hashes, into an XML.

The simple solution to this is to use the XML::Dumper module.

Let’s suppose your data structure looks like this:

%hash_of_hashes = {
    item1 => {
                item1_1       => 'value1_1',
                item1_2       => 'value1_2',
    },
    item2 => {
                item2_1       => 'value2_1',
                item2_2       => 'value2_2',
    },
  };

You can easily convert this into an XML representation using this command:


my $xml_output = XML::Dumper::pl2xml( \%hash_of_hashes );

So you’ll end up with this output:

<perldata>
 <hashref memory_address="0x878e784">
 <item key="item1">
 <hashref memory_address="0x87a8c58">
 <item key="item1_1">value1_1</item>
 <item key="item1_2">value1_2</item>
 </hashref>
 </item>
 <item key="item2">
 <hashref memory_address="0x87a8c61">
 <item key="item2_1">value2_1</item>
 <item key="item2_2">value2_2</item>
 </hashref>
 </item>
 </hashref>
</perldata>

But be aware: You need to pass the hash by reference, imposing the \%hash_of_hashes notation, otherwise you end up with something like this:

<perldata>
 <scalar>item_1</scalar>
 <scalar>item_2</scalar>
</perldata>

It’s so obvious, but I had overlooked that as well in the first attempts 😉

Comments are closed.