Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Sort xml nodes by schema

by laozi (Novice)
on Sep 10, 2013 at 08:31 UTC ( #1053199=perlquestion: print w/replies, xml ) Need Help??

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

Dear monks

I am using XML::Simple to translate a hash to xml. i then need to validate the XML using and schema. the schema forces an order to the elements which i didnt manage to cancel so i want to generate the xml in the same order listed by the schema

i tried modifying the sorted_keys() hook but that approach has one 2 major disadvantages. first i have to duplicate info that exists in the schema. second it causes XMLout to generate empty attributes in case there is no hash entry

How can i sort the elements based on the order required in the schema?

Is there a module that can do that?

From another angle, how can i disable the ordering requirement in my schema? . the only option i found is to switch the sequence to unbounded choice but that ruins my validation

Your help is appreciated

Replies are listed 'Best First'.
Re: Sort xml nodes by schema
by tobyink (Canon) on Sep 10, 2013 at 09:14 UTC

      No problem i am moving!

      But, do you know how to sort elements according to schema using XML::LibXML ?

Re: Sort xml nodes by schema
by AlexTape (Monk) on Sep 10, 2013 at 09:20 UTC


      Suppress empty does ease the pain

      I have another issue i forgot to mention

      i need a certain key value pair to translate to an element rather than an attribute

      is there a way to do that with XML::Simple ?

        can you give an example?
        $perlig =~ s/pec/cep/g if 'errors expected';
Re: Sort xml nodes by schema
by AlexTape (Monk) on Sep 11, 2013 at 08:25 UTC
    fyi: something crosses my mind this morning
    you can output a hash in the same order as you inserted elements into it
    use Tie::IxHash; tie %hash, "Tie::IxHash"; $hash{any1}="first"; $hash{some1}="second"; $hash{big1}="third"; foreach $foo (keys %hash) { print " $foo\n"; } while (( $foo, $bar ) = each %hash ) { print "$foo is $bar"; }
    output should be:
    >any1 is first
    >some1 is second
    >big1 is third
    maybe XML::Simple adopt that.. dnt knw..

    kindly perlig

    $perlig =~ s/pec/cep/g if 'errors expected';

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (6)
As of 2022-12-07 22:33 GMT
Find Nodes?
    Voting Booth?

    No recent polls found