The only solution for this type of problem is XML::Compile.
Why? Apparently the problem here is to get XML data serialized as perl data structures. I see two use cases: either the producer and the consumer of the XML data is the same system, or it is different systems, for example us and a different party.
In the first case I don't see why to go the XML path at all. It is much easier to code and probably much more efficient if just a data serialization format is used --- YAML, JSON, Storable, bencode, perl (Data::Dumper) or whatever. Typically this involves one line of code for serializing and deserializing, and should always be faster than doing some XML parsing.
In the second case there are two parties which need to handle the XML data. In this case, you must have an XML schema, to have a contract how the XML data should look like. And if you have the XML schema, then you can easily use XML::Compile to gain at least the simplicity of serializing and deserializing.