首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XmlPullParser解析xml

使用XmlPullParser解析xml
EN

Stack Overflow用户
提问于 2011-11-05 13:04:03
回答 2查看 7.3K关注 0票数 1

我正在使用android,并在android中使用xmlpullparser来解析xml文档,如下所示:

代码语言:javascript
复制
<spaces>
  <space>
    <name></name>
    <desc></desc>
    <songs>
      <song>
        <name></name>
        <thumb></thumb>
      </song>
      <song>
        <name></name>
        <thumb></thumb>
      </song>
    </songs>
  </space>
</spaces>

我使用的是:

代码语言:javascript
复制
public List<Space> parse(String xmlString) {
        List<Space> Spaces = null;
        XmlPullParser parser = Xml.newPullParser();
        try {
            parser.setInput(new StringReader(xmlString));
            int eventType = parser.getEventType();
            Space currentSpace = null;
            boolean done = false;
            while (eventType != XmlPullParser.END_DOCUMENT && !done) {
                String name = null;
                switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    Spaces = new ArrayList<Space>();
                    break;
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    if (name.equalsIgnoreCase("space")) {
                        currentSpace = new Space();
                        System.out.println("space");

                    } else if (currentSpace != null) {

                        if (name.equalsIgnoreCase("name")) {
                            currentSpace.setName(parser.nextText());
                            System.out.println(":::"+currentSpace.getName());

                        } else if (name.equalsIgnoreCase("id")) {
                            if (currentSpace.getId() == null) {
                                currentSpace.setId(parser.nextText());
                            }

                        }

                    }

                    break;
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    if (name.equalsIgnoreCase("space") && currentSpace != null) {
                        Spaces.add(currentSpace);

                    } else if (name.equalsIgnoreCase("spaces")) {
                        done = true;

                    }
                    break;
                }
                eventType = parser.next();  
            }
        } catch (Exception e) {
            Log.e("Projects List", e.getMessage(), e);
            throw new RuntimeException(e);
        }
        return Spaces;
    }

我的问题是,我只想要<space>中的<name></name>,而不是<song>中的,并且使用上面的代码可以同时获得两者。

我看了Parsing XML XmlPullParser android,但没有得到我的解决方案。

请回复。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 13:21:53

在解析START_TAG时,当您解析<space>标签时,获取一个计数器变量并将其赋值为1,然后每当您获得<name>标签时,就将其递增1。

现在,在解析<name>标签时,只需检查<name>标签是否第一次出现,如果是,则解析所需的值。

代码语言:javascript
复制
case XmlPullParser.START_TAG:
                    name = parser.getName();
                    if (name.equalsIgnoreCase("space")) {
                        cnt=1;
                        currentSpace = new Space();
                        System.out.println("space");

                    } else if (currentSpace != null) {

                        if (name.equalsIgnoreCase("name")) 
                         {
                            currentSpace.setName(parser.nextText());
                            if(cnt==1)
                            {
                                // you have <name> from <space>
                            }
                            System.out.println(":::"+currentSpace.getName());
                            cnt++;
                        } else if (name.equalsIgnoreCase("id")) {
                            if (currentSpace.getId() == null) {
                                currentSpace.setId(parser.nextText());
                            }

                        }

                    }

                    break;
票数 4
EN

Stack Overflow用户

发布于 2011-11-05 13:33:29

您可以使用标志并将其值初始化为false。当您第一次输入name标记时,检查false,当您进入标记时,将其值设置为true。那么它就不会再次进入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8018305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档