####
use strict;
use XML::Twig;
my $hash = {
name => 'bob',
product => 'blah',
model => 'blah model',
description => 'too much money? gimme!',
};
my $twig = XML::Twig->new(pretty_print => 'indented');
## mirod pointed out that I overlooked that parse can
## indeed handle file handles. Woops. :-)
$twig->parse(\*DATA);
my $elt = create_elements($twig->root(), $hash);
$twig->print();
sub create_elements
{
my $parent = shift;
my $data = shift;
while (my ($k,$v) = each(%$data))
{
# get_xpath returns a list. We should only every find 1
# node, so extract that.
my @els = $parent->get_xpath($k);
my $el = $els[0];
if ($el)
{
$el->set_text($v);
}
else
{
$el = XML::Twig::Elt($k => $v);
$el->paste(last_child => $parent);
}
}
}
__END__