This is how I implement it. I would use ASIHTTPRequest for all connection elements and not worry about this part. It can handle your entire data load asynchronously very easily with simple delegation methods.
I will have a parser class that takes a URL, loads it asynchronously and then parses the returned data. Then it will return an array of parsed children through the delegate method to a table that will display the children in the xml data.
I would create a subclass of UITableViewController that would handle any type of url / data, in which case you would only need to write one tableview class and not worry about how the user navigates. This will make it so that you only need to write one class, and it will handle any number of abbreviations or combinations. This implementation is highly dependent on how complex the various layers of XML data are. If they are very different from each other, it makes sense to have a cleaner code in the table view and not have if's checking the data type in creating the cell.
Using a navigation style application will eliminate the need to reanalyze the data each time the view is loaded as you view the stack. At any time forward, although it will be reassembled, a simple urls-> array cache can solve this if needed / required. This will require a reload of data every time the application starts. Of course, if you get a warning about 3 memory levels, you will need to re-analyze or search the cache to restore the backup.
If you want to use the caching system, I would write a class that is between the view controllers and the URL parser that checks the repository, and if it is there, return the data array, otherwise return nil and go it.
I personally used NSXMLParser, as that is what I am familiar with. You may want to place elements in the class shell, in which case you just need to check what type of element you have on didStartElement , and set the enumeration to include through creation. it's pretty easy using nsxmlparser. I did not use any other parser for comparison, but found that debugging NSXMLParser was fairly simple and the coding was simple, so it was not difficult to start and run it. Here is a great site on all of the different XML parses:
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
So, I would get a subclass of NSObject that takes a URL, loads it through ASIHTTPRequest, parses it. The UITableviewController subgroup, which on a cellular connection, allocates the same class as the class controller with the new URL and pushes it onto the navigation stack. A loading screen appears in the view until the array is returned, and then just reload the data. Hope this will be a very DRY KISS.
I would put as much code as possible in global classes. If each data attraction has only one main category, as in
<items> <stuff></stuff> .... <stuff></stuff> </items> EOF
I would use an array to place all the values. If there is more than one main section, I would save everything in the dictionary with the parent attribute as the key and values ββin the array. Then on the table there are different sections based on dictionary keys.
I hope this answers some of your questions. I'm not sure how low you were looking. I speak from the development of quite a few applications and the writing of an RSS reader. Let me know if you want me to clarify.