#!/usr/bin/perl use strict; use warnings; use XML::Simple qw(:strict); my $userref = (); $userref->{0}{'hash'}{'name'} = 'joe'; $userref->{0}{'hash'}{'type'} = 'user'; $userref->{1}{'hash'}{'name'} = 'mary'; $userref->{1}{'hash'}{'type'} = 'user'; my $XmlRef = (); # loop thru all keys in userref for my $key(sort keys %$userref){ # the key name my $keyname = 'key'.$key; my $cnt = scalar keys %{$XmlRef->{$keyname}{'devices'}}; my $i=0; for my $foo(keys %{$userref->{$key}{'hash'}}){ $XmlRef->{$keyname}{'devices'}{'dev'.$cnt}{'param'}{$foo}{'content'} = [ $userref->{$key}{'hash'}{$foo} ]; $i+=1; } } # write XML to file my $tmpfile = '/tmp/testfile.xml'; my $fh; open $fh, '>', $tmpfile or die "open($tmpfile): $!\n"; XMLout($XmlRef, XMLDecl => '', ContentKey => '-content', NoAttr => 0, OutputFile => $fh, KeyAttr => { 'param' => 'id' }, AttrIndent => 1, ); close $fh;