http://www.perlmonks.org?node_id=475332


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

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

Replies are listed 'Best First'.
Re^3: XML::Simple is doing too much for me! Help please.
by izut (Chaplain) on Jul 15, 2005 at 19:29 UTC
    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