You should definitely look for a common chache implementation. I do not do C #, so I do not know any solutions in your language. In Java, I would recommend EHCache.
Caching is a lot more complicated than it sounds. That is why it is probably a good idea to rely on the work done by others. Some problem that you will encounter at some point is concurrency, cache invalidation, lifetime, cache lock, cache management (statistics, clearing caches, ...), disk overflow, distributed caching, ...
Cache monitoring is a must. You need to make sure that the caching strategy that you put in place actually does something good (cache hits / cache misses, percentage of cache used) ... You should probably split your cache in several regions in order to have the ability to better control usage cache.
As a side note, while you are caching your XML after conversion, you should probably keep its String representation (and not the object tree). This is the smaller conversion that needs to be done after the cache, since you are probably outputting it as a String. And there is a good chance that the String representation will take up less space (but, as always, measure it, don't forget my word).
source share