With my understanding about your problem statement i suggest you can use HashMaps where a Key,Value pair could be <MainCategory,SubCategory> Where the SubCategory is of type HashMap. That means you will result in something like this.
like this. Still not clear. Take a look at this snippet.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com