Have you ever considered using XML::Compile? With the XML::Struct you get a Perl hash, but you don't know which fields will be arrays or not. The parsing is based on the structure of the record at hand, not the XML schema. With XML::Compile you can get a Perl hash that has the same structure for every schema. It can even generate a template record that contains an example how your hash should look like to be able to generate (or parse) any XML record of a schema.
Have you ever considered using XML::Compile? With the XML::Struct you get a Perl hash, but you don't know which fields will be arrays or not. The parsing is based on the structure of the record at hand, not the XML schema. With XML::Compile you can get a Perl hash that has the same structure for every schema. It can even generate a template record that contains an example how your hash should look like to be able to generate (or parse) any XML record of a schema.
http://blogs.perl.org/users/brian_e_lozier/2011/10/using-xmlcompile-to-output-xsd-compliant-xml.html
I use it for Lido::XML