I wrote the following code for parsing an xml file. But with this the order is lost as I am using XML simple.
What changes can I make for maintaining the order?
use XML::Simple;
my $xml = XMLin('test.xsd');
my $TopLevel = 'DOC';
PrintResults('', $TopLevel);
sub PrintResults {
my $pre = shift;
my $start = shift;
return unless $start;
$pre .= "." if $pre;
#print "$pre$start\n";
my $xml_start = GetNode($start);
return unless ref($xml_start);
foreach my $key (keys %$xml_start) {
if ($key ne "") {
print "$pre$key\t$xml_start->{$key}->{minOccurs}\t$xml_start->
+{$key}->{maxOccurs}\n";
}
# print "$pre$start.$key\n";
PrintResults("$pre$key", $xml_start->{$key}->{type});
}
}
sub GetNode {
my $name=shift;
#print "Name: $name\n";
return {$xml->{'xs:complexType'}->{$name}->{'xs:sequence'}->{'
+xs:element'}->{name} => {type=>$xml->{
'xs:complexType'}->{$name}->{'xs:sequence'}->{'xs:element'}->{type}}}
+if exists($xml->{'xs:complexType'}->{$
name}->{'xs:sequence'}->{'xs:element'}->{name});
return $xml->{'xs:complexType'}->{$name}->{'xs:sequence'}->{'x
+s:choice'}->{'xs:element'} if exists($
xml->{'xs:complexType'}->{$name}->{'xs:sequence'}->{'xs:choice'}->{'xs
+:element'});
return $xml->{'xs:complexType'}->{$name}->{'xs:sequence'}->{'x
+s:element'} if exists($xml->{'xs:compl
exType'}->{$name}->{'xs:sequence'}->{'xs:element'});
return if exists($xml->{'xs:simpleType'}->{$name}->{'xs:restri
+ction'});
die "Node name not found '$name'\n";
}