1

编辑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 FactoryXML Pull Parser和 ** Android SIMPLE library**。我真正在寻找的是一个库,我可以使用它来解析 XML,就像 SIMPLE 一样,并允许我创建与 XML 元素匹配的数据模型文件。

但是,如果我不能使用库,我将如何解析这种独特的 XML,例如 XML Pull Parser..?

4

2 回答 2

1

所以我能想出的这个问题的最佳解决方案是简单地使用recursion。编写方法分别解析每个标签,并将 XMLPullParser 作为参数传入。

所以这里有一些伪代码:

parseArray(XmlPullParser xmlpp)
{
    // require start and end tags 
    if you hit another tag, call its corresponding method
}

这样,如果你在 parseDict 中并点击了一个 dict 标签,你可以简单地再次调用 parseDict() 。

只要您抓取数据并将其设置为某种数据模型,将 dict 重复嵌入到 dict 中并不重要,因为您的数据模型可以以任何方式工作。

于 2013-06-11T18:11:58.993 回答
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”时,它都会进入同一个循环。

于 2013-06-11T18:27:29.333 回答