Monk 1: What X should I use?
Monk 2: My favourite is a.
Monk 3: Oh, I always use b. b rules!
Anonymonk 1: Oh, come on, b is the sux0r! It can't even handle z properly
Monk 3: Can't we just get rid of anonymonks? They're such a pain.
Monk 4: Everyone I know is using c. Seems to do the job for me ...
Translation: oi, you could start a flamewar with a question like that. :-)
I may not have many tools in my XML toolbox, but XML::Twig has seemed to handle everything so far. Admittedly it won't handle "bad" XML as Ovid is trying to do, but for "good" XML production, I've been quite happy with XML::Twig. My requirements when I chose XML::Twig were to be able to read in an XML template, look up data from other data sources, process it, and insert transformed data into the XML template, and then have that parsed/used by a Java application where order usually mattered. XML::Twig allowed me to turn around that project in a matter of time that impressed me. YMMV