XML::SImple has to guess. Sometimes it guesses wrong no matter what you do. Then its arguments get rather un-simple while you try to shoehorn it in. I mean, your code and your example data look fine, so I can only assume the next file didn't come out in the same-ly shaped data structure.
in reply to XML Simple
You're much better off using something like XML::Twig or one of its cousins. Then you can say precisely what you wish to find and how to process it. Personally, I was mad about wrong guesses by Simple and too much work in Twig. So, I wrote XML::CuteQueries as a kind of thought experiment. I'm not exactly recommending using it — in fact it has serious flaws, but I think I kindof like it. It's cute.