I think that this is a great way to handle items.
For RPGs you typically have lots of items in the game, some times approaching the hundreds to thousands of unique items the player can interact with. Having that many individual classes would be ridiculous and un-maintainable, so I think you have made a good choice.
As far as using XML or other methods, such as JSON, well, that is entirely up to you. As long as your program can read and write to it, and you understand it, you could write bytes to a text file for all the difference it would make.
An added bonus of implementing items this way is the ability to add items later without to much work. However, doing items this way introduces a ton of work up front in the form of decoding, encoding, and determining the functionality of the item from what you decoded.
Keep going, and I would love to see what you come up with.