Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: XML::Simple is doing too much for me! Help please.

by shiza (Hermit)
on Jul 15, 2005 at 19:01 UTC ( #475328=note: print w/replies, xml ) Need Help??


in reply to XML::Simple is doing too much for me! Help please.

Try using keeproot (if you aren't):

Example:
my $xml_obj = XML::Simple->new(Keeproot => 1);
With Keeproot:
#!/usr/bin/perl use strict; use XML::Simple; use Data::Dumper; my $xml_obj = XML::Simple->new(Keeproot => 1, ForceArray => ['campaign +']); # xml my $xml = $xml_obj->XMLin('test.xml'); print Dumper($xml); my $out = $xml_obj->XMLout($xml); print Dumper($out); exit; ---------------------------------------------------------- $VAR1 = { 'campaign' => [ { 'menuid' => '10118-2', 'action' => '0', 'phonenumbers' => { 'phonenumber' => { 'number' +=> '4167781583', 'prompts' + => { + 'prompt' => { + 'tts' => 'Hello, this is a test.', + 'promptid' => '2' + } + }, 'callid' +=> '1234abc' } } } ] }; $VAR1 = '<campaign action="0" menuid="10118-2"> <phonenumbers name="phonenumber" callid="1234abc" number="4167781583 +"> <prompts name="prompt" promptid="2" tts="Hello, this is a test." / +> </phonenumbers> </campaign> ';

Without keeproot:
#!/usr/bin/perl use strict; use XML::Simple; use Data::Dumper; my $xml_obj = XML::Simple->new(ForceArray => ['campaign']); # xml my $xml = $xml_obj->XMLin('test.xml'); print Dumper($xml); my $out = $xml_obj->XMLout($xml); print Dumper($out); exit; ------------------------------------------------------ $VAR1 = { 'menuid' => '10118-2', 'action' => '0', 'phonenumbers' => { 'phonenumber' => { 'number' => '4167781583', 'prompts' => { 'prompt' => +{ +'tts' => 'Hello, this is a test.', +'promptid' => '2' } }, 'callid' => '1234abc' } } }; $VAR1 = '<opt action="0" menuid="10118-2"> <phonenumbers name="phonenumber" callid="1234abc" number="4167781583 +"> <prompts name="prompt" promptid="2" tts="Hello, this is a test." / +> </phonenumbers> </opt> ';

Replies are listed 'Best First'.
Re^2: XML::Simple is doing too much for me! Help please.
by jdtoronto (Prior) on Jul 15, 2005 at 19:10 UTC
    That changes the look of the HASH, but the resultant XML still comes out 'squashed'. I was explicity forcing the root to be named, so that wasn't an issue. The issue is the phonenumbers - have a look at the original XML, then what gets produced!
    $VAR1 = { 'campaign' => [ { 'menuid' => '10118-2', 'action' => '0', 'phonenumbers' => { 'phonenumber' => { 'number' => '4167781583', 'prompts' => { 'prompt' => { 'tts' => 'Hello, this is a test.', 'promptid' => '2' } }, 'callid' => '1234abc' } } } ] };
    <campaign action="0" menuid="10118-2"> <phonenumbers name="phonenumber" callid="1234abc" number="4167781583 +"> <prompts name="prompt" promptid="2" tts="Hello, this is a test." / +> </phonenumbers> </campaign>
    But thanks for the suggestion! jdtoronto
      Try setting the ForceArray options like this:
      $xml = XMLin("teste.xml", KeepRoot => 1, ForceArray => [ 'phonenumber', 'prompt' ],);
      izut

      surrender to perl. your code, your rules.

        That did it, thanks izut. Just to keep the record complete, here is the results:
        $VAR1 = { 'campaign' => { 'menuid' => '10118-2', 'action' => '0', 'phonenumbers' => { 'phonenumber' => [ { 'number' => '4167781583', 'prompts' => { 'prompt' => [ { 'tts' => 'Hello, this is a test.', 'promptid' => '2' } ] }, 'callid' => '1234abc' } ] } } };
        <campaign action="0" menuid="10118-2"> <phonenumbers> <phonenumber callid="1234abc" number="4167781583"> <prompts> <prompt promptid="2" tts="Hello, this is a test." /> </prompts> </phonenumber> </phonenumbers> </campaign>
        Now I can also see hot to contrusct the HASH programatically, which si what I was attempting to do! Thanks again. jdtoronto

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (7)
As of 2020-05-30 18:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If programming languages were movie genres, Perl would be:















    Results (173 votes). Check out past polls.

    Notices?