Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^2: How to create XML tree from non-XML source

by H4 (Acolyte)
on Sep 08, 2008 at 17:52 UTC ( #709822=note: print w/replies, xml ) Need Help??


in reply to Re: How to create XML tree from non-XML source
in thread How to create XML tree from non-XML source

Thank you for your suggestions. XML::Generator looks good. But how can I manipulate a tree created with XML::Generator?
  • Comment on Re^2: How to create XML tree from non-XML source

Replies are listed 'Best First'.
Re^3: How to create XML tree from non-XML source
by AZed (Monk) on Sep 08, 2008 at 20:28 UTC

    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>
      I wasn't aware I could use XML::Twig to create trees! Having found the (poorly documented) package XML::Twig::XPath, I think I can now do all I want to do. Thank you everybody for helping me. The discussion about data formats and representations is very interesting, please keep on - I'll be watching and silently learning from it.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://709822]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2022-12-09 11:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?