in reply to xml parsers

You should look for XML::Checker if you want to validate the XML against a DTD. It is a drop-in replacement for XML::Parser so you can look at XML::Parser docs.

As for "querying the XML for specific data" you can probably use XML::XPath, or XML::XQL, or XML::XSLT, or even XML::PYX, XML::Simple or XML::Twig or some other module, there's plenty of them