Loading information from files when creating roguelikes seems very wise to me. I also use xml to serialize objects. I love that it is so easy to edit and read. I could not imagine hard-coding all the data!
Currently, I use xml for item data and monster data. When starting the game, I just read the item and monster xml files. From this, I create a pool of available monster and items available to the game. The game just uses these pools to populate the dungeon. That way, I can add an unlimited amount of new monsters/items so long as I enter their xml data.
In xml, I also store things like how the item is used. So when the player uses an item, that item will be used however it is intended. The only time code needs to be touched is when adding a new class of effect for items.
In the future, I am thinking of adding an xml file for game parameters. That way I can easily tweak these things for balancing the game. [In my current project, I am almost set for an alpha release, with game balancing to follow.]
So yeah, I am a big fan of xml. I use C++ since I made a roguelike library for it and there's some libraries for easily parsing the xml so I think using xml files can work for most languages. It is (maybe) a little more work to get set up initially, but in the end it is worth it. In my current project, I have 90+ monsters and 90+ items; after coding the requirements to 'run' these items and monsters, it only took me an afternoon to enter all this content (since typing things into xml is a piece of cake).
Also, it opens up the opportunity for players modding the game. For example, say some player wants, unicorns, dragons, and puppies as possible monsters, he only has to fill out the xml et voila he will be fighting them in the next game.
By the way, I use programmer's notepad and Editpad to work with the xml.