XML::Generator is really intended for converting existing data structures to XML. If you want to manipulate them a bit before outputting them, I'm going to second the recommendation for XML::Twig, which is easy to use and fairly well documented.
Here's a quickie example for you, though there are better ones at the link above:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $twig;
my $root = "<nodetag />";
my $element;
my $firstelem;
my $childcnt;
$twig = XML::Twig->new(
output_encoding => 'utf8',
pretty_print => 'record');
# $root is a string containing the starting tag
$twig->parse($root);
$root = $twig->root;
# $root is now the root twig element, and we can modify it
$root->set_gi('nodetag_root');
# We can add children to it
foreach $childcnt (0 .. 10)
{
$element = XML::Twig::Elt->new('childtag' => 'child text');
$element->set_att('index',$childcnt);
$element->paste('last_child',$root);
}
# We can modify an arbitrary child
$element = $root->first_child('childtag[@index="5"]');
$element->set_text('Number Five, alive!');
# And we can print it, to a filehandle if necessary
$twig->print;
It outputs:
<?xml version="1.0" encoding="utf8"?>
<nodetag_root>
<childtag index="0">child text</childtag>
<childtag index="1">child text</childtag>
<childtag index="2">child text</childtag>
<childtag index="3">child text</childtag>
<childtag index="4">child text</childtag>
<childtag index="5">Number Five, alive!</childtag>
<childtag index="6">child text</childtag>
<childtag index="7">child text</childtag>
<childtag index="8">child text</childtag>
<childtag index="9">child text</childtag>
<childtag index="10">child text</childtag>
</nodetag_root>
|