你如何解析嵌入在自己内部的XML标签?

时间:2013-05-28 14:01:00

标签: android xml xml-parsing android-library xmlpullparser

编辑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??

2 个答案:

答案 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'时,它将进入同一循环。