编辑1:
我已经开始尝试使用XmlPullParser了,我正在考虑在dicts中处理dicts(这听起来不对,我知道)我可以使用 递归 ,如readDict (XmlPullParser),并在遇到dict元素时调用它。
这可以使用包含HashMap对象列表的简单dict模型类。
随着我的进步,我会更新此问题...
原始问题:
是否有一个能够以下列形式解析XML的android库?
<dict>
<key>..</key>
<string>..</string>
<key>
<array>
<dict>
<key>
<string>
<key>
<array>
<dict>
<key>
<string>
</dict>
<dict>...</dict>
<dict>...</dict>
</array>
</dict>
</array>
</dict>
可在以下位置找到完整的XML文件:http://www.tsn.ca/config/iphone/TSNiphoneconfig.xml
问题:
正如您所看到的,某些标签嵌入“自身内部”。这是我第一次看到这个。
我研究过 SAX Parser Factory , XML Pull Parser 和** Android SIMPLE库**。 我真正需要的是一个库,我可以像SIMPLE 一样解析XML,并允许我创建与XML元素匹配的数据模型文件。
但是,如果我不能使用库,我将如何使用XML Pull Parser解析这种独特的XML??
答案 0 :(得分:0)
因此,我能想出的最佳解决方案是使用递归。 编写分别解析每个标记的方法,并将XMLPullParser作为参数传入。
所以这里有一些伪代码:
parseArray(XmlPullParser xmlpp)
{
// require start and end tags
if you hit another tag, call its corresponding method
}
这样,如果你在parseDict并点击dict标签,你可以再次调用parseDict()。
只要您抓取数据并将其设置为某种数据模型,dict就会重复嵌入到dict中并不重要,因为您的数据模型将以任何一种方式工作。
答案 1 :(得分:0)
如果你只想解析'dict'中的数据(我的意思是嵌入式'dict'不依赖于父'dict'),那么你就不需要递归逻辑。你可以这样做:
int eventType = xpp.getEventType(); //xpp is reference of XmlPullParser
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("dict")) {
//do something
}
eventType = xpp.next();
}
每当解析'dict'时,它将进入同一循环。