So the best solution to this problem that I could come up with is to simply use recursion. Write methods to parse each tag separately, and pass in the XMLPullParser as a parameter.
So here's some pseudocode:
parseArray(XmlPullParser xmlpp)
{
// require start and end tags
if you hit another tag, call its corresponding method
}
That way if you're in parseDict and hit a dict tag, you can simply call parseDict() again.
As long as you're grabbing your data and setting it into some kind of data model, it won't matter that dict is embedded within dict repeatedly, because your data model will work either way.