I agree with the XML::Twig suggestion. You can use XML::Twig in tree-mode style or event-mode style. I first started using it tree-mode but quickly realized that event-mode made at least as much sense for my own application.
If you're using this in a persistant situation, where one perl interpreter will be parsing Many XML documents before dying, be aware that older
versions of XML::Twig had a memory leak associated with circular references in internal perl structures. This is fixed in the latest stable version if you have WeakRef installed, and there's a workaround available
on the XML::Twig website if you need to use an older version.
Have fun,
Alan