I like the "everything and nothing" definition of XML.

It's definitely getting a lot of hype, some of it undeserved. I have a coworker who thinks it's the next greatest thing to sliced bread, and we use it on our project for all kinds of things including external data representation.
In some ways you can think of HTML as a specific use of the XML format (although this isn't 100% technically accurate).
Suppose you're writing a phone book program that will display a list of names and phone numbers. You want to save the phone list to a file on disk. You've got a couple of options for how to do this:
- One way would be to have C++ or Java just "serialize" the data structure you're using and dump it to a file. You get a binary file that would look like gibberish if you tried to view it in, say, TextEdit.
- Another way would be to dump the info into a text file, say, name followed by phone number, separated by commas. Or pipe symbols (Bob|555-1212). Or on separate lines. Whatever, it's your program.
- A third way would be to define an XML file format, that maybe looks like this:
<phonelist version="1.1">
<entry>
<name>Bob</name>
<number>555-1212</number>
</entry>
</phonelist>
What does that buy you? Well, if you were to open this up in TextEdit, it would make much more sense to you than the binary gibberish or even the plain-text (but proprietery encoding) format. You could edit this file by hand (or with other tools) and your phone book app should still be able to read it. Assuming you make the format rules available, anyone else could make phone book files, so you've suddenly created an open file format. If you can convince other phone book authors to use the same rules, you've got an open standard.
You've got enough code in there that computer algorithms know how to work with or translate the data into other forms. Your rules allow you to validate the data to confirm the phone list isn't corrupted.
Within your program, you can use an XML parsing library and "boom" load or save the data in just a couple of steps, as opposed to writing up whole routines to manually parse some other file format.
But there's no magic to it. It's just a structured way of writing stuff into a text file. So is HTML.