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

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 exploiting the Monastery: (5)
As of 2022-12-06 11:15 GMT
Find Nodes?
    Voting Booth?

    No recent polls found