in reply to XML gurus unite!!

If you use a combination of ForceArray and an empty KeyAttr then the embedded attributes will be captured nicely:
# translate xml text to hash ref $xmlparms = eval { XML::Simple::XMLin($xmltext, nsexpand => 1, ForceArray => 1, KeepRoot => 1, KeyAttr =>[], )};
I do not copy your quotes problem, XML::Simple renders the quotes as is into the hash. Probably this is converted during instream before XML::Simple gets involved?

Update:
Actually the quotes are generated per default by XML::Simple on output. You can turn off this behavior by specifying the option:

NoEscape=>1
Doing so you run the risk of introducing fake tags into your xml stream, e.g. if your text includes a '<' character.