sub _xml_serialize {
my $self = shift;
my($parent_node, $tree) = @_;
no warnings 'uninitialized';
while(my($k, $v) = each %$tree) {
if(ref $v eq 'HASH') {
my $child_node = XML::LibXML::Element->new($k);
$self->_xml_serialize($child_node, $v);
$parent_node->appendChild($child_node)
}
elsif(ref $v eq 'ARRAY') {
foreach(@$v) {
my $child_node = XML::LibXML::Element->new($k);
if(ref eq 'HASH' or ref eq 'ARRAY') { $self->_xml_serialize($child_node, $_) }
else { $child_node->appendText($_ || '') }
$parent_node->appendChild($child_node)
}
}
else {
$parent_node->appendTextChild($k, $v || '')
}
}
}
####
$self->_xml_serialize(
$doc_root,
outer => { inner => 'value' }
)
####
...value...