Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

XML::Simple, XMLOut() question

by duesouth (Initiate)
on Dec 15, 2010 at 13:33 UTC ( [id://877264]=perlquestion: print w/replies, xml ) Need Help??

duesouth has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

I have an XML::Simple question. I'm trying to format a data structure into an XML node that will be understood by my companies legacy apps.

Making changes to the underlying data structure will mean big changes, so am investigating all possible XMLOut() options first. The data structure is:

'user' => { 'favorites' => [ { 'title' => 'Book1','genre' => '5','author' => 'Someone' }, { 'title' => 'Book2','genre' => '1','author' => 'Someone' } ] }

XMLout() formats this to:

<user> <favorites> <title>Book1</title> <genre>5</genre> <author>Someone</author> </favorites> <favorites> <title>Book2</title> <genre>1</genre> <author>Someone</author> </favorites> </user>

Is it possible to use any of XMLout's options to get the desired format below?

<user> <favorites> <item> <title>Book1</title> <genre>5</genre> <author>Someone</author> </item> <item> <title>Book2</title> <genre>1</genre> <author>Someone</author> </item> </favorites> </user>

My current XML::Simple options are;

use XML::Simple qw(:strict); #must use strict my $xs = new XML::Simple; my $xml = $xs->XMLout($req,NoAttr => 1,RootName=>'user',KeyAttr=>[]);

Any help greatly appreciated.

Replies are listed 'Best First'.
Re: XML::Simple, XMLOut() question
by samarzone (Pilgrim) on Dec 15, 2010 at 14:29 UTC

    On the first sight it seems that you will have to change your structure to following -

    'user' => { 'favorites' => { 'item' => [ { 'title' => 'Book1','genre' => '5','author' => 'Someone' }, { 'title' => 'Book2','genre' => '1','author' => 'Someone' } ] } }
    -- Regards - Samar
      Thinking along the same lines. Means looping through the anon array of hashes returned by the query to extract a users favorites and adding the parent key 'item' to each, could work though will give it a try.

        You need not loop. Following would suffice

        $x->{user}->{favorites} = {item => $x->{user}->{favorites}};

        where $x is your original structure


        -- Regards - Samar

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (6)
As of 2024-04-23 08:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found