XML can be a very handy, but I agree it's often used as a hammer for a screw: It works, but the result is messy. I found XML very usable for having a standard for document exchanging in b2b applications for example. With XSLT you can easily translate it to inhouse formats, and the documents can be easily validated against schema's and dtd's defining the document structure. IMHO, XML is a step forward after EDI, IDOC and all that.
XML for config files are handy too, but it's not the right tool for data storage or exchanging data which does not need something like schema validation or possible transformation to other formats. XML is then just a whole lot of overhead. I mean whoever thought that describing every instance of a field by tags is a clever idea if you want to store lots of data?!
And JDBC for XML files? I mean, really...
Furthermore, even though webservices are easy to create with JBuilder and Visual Studio, they're often just overkill for what they're used for.
I also think the 'readable for humans' argument for XML is usually just silly: The XML documents are most of the time not *meant* to be read by humans.
If XML is 'shite' then just spray it on the land so that the crops grow better and stay away from the smell.
In first place I wanted to do it with xml, because most of our customers won't be able (or willing) to install a proper database. However, if the tests run well I'll happyly switch over to HSQLDB.
We came across those problems as well. Like 'hey, we use SQL Server and dont want another db to maintain'. Solution: Silently install a db together with your app and just don't tell them there's one hidden somewhere.