解析XML并将内容放入ArrayList <hashmap <string,string =“”>&gt; </hashmap <string,>

时间:2014-07-30 08:43:46

标签: android xml xml-parsing

我目前正在使用XML解析,但我有点迷失,因为首先我比JSON更喜欢JSON。好吧无论如何我需要这个工作,所以我查看这个link如何创建一个方法来做我需要的。基本上我只需要将XML的所有内容传递给ArrayList,而不管我将不会使用的其他标记。这是迄今为止的代码:

public ArrayList<HashMap<String, String>> StringToArrayList (String data) throws Exception{
        ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>();


        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();

        HashMap<String, String> hashMap = new HashMap<String, String>();
        String tag = "";

        xpp.setInput(new StringReader (data));
        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {


            if(eventType == XmlPullParser.START_DOCUMENT) {
                //Document start
            } else if(eventType == XmlPullParser.END_DOCUMENT) {
                //Document end
            } else if(eventType == XmlPullParser.START_TAG) {
                //Get the tag name then set it into tag String variable
                tag = xpp.getName();
            } else if(eventType == XmlPullParser.END_TAG) {
                if(xpp.getName().equals("start")){
                    //Add the hashMap into the list since the start tag now end
                    arrayList.add(hashMap);
                }
            } else if ((tag.equals("tag1")) && (eventType == XmlPullParser.TEXT)) {
                hashMap.put(tag,xpp.getText());
                tag = "";
            } else if ((tag.equals("tag2")) && (eventType == XmlPullParser.TEXT)) {
                hashMap.put(tag,Uxpp.getText());
                tag = "";
            }

            eventType = xpp.next();
        }

        return arrayList;
    }

对于示例,我的XML看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<content>
  <start>
    <tag1>Tag1 Content 1</tag1>
    <tag2>Tag2 Content 1</tag2>
  </start>
  <start>
    <tag1>Tag1 Content 2</tag1>
    <tag2>Tag2 Content 2</tag2>
  </start>
  <start>
    <tag1>Tag1 Content 3</tag1>
    <tag2>Tag2 Content 3</tag2>
  </start>
</content>

而现在我得到的值为[{tag1=Tag1 Content 1,tag2=Tag2 Content 1},{tag1=Tag1 Content 2,tag2=Tag2 Content2},{tag1=Tag1 Content 3,tag2=Tag2 Content 3}]而是[{tag1=Tag1 Content 3,tag2=Tag2 Content 3},{tag1=Tag1 Content 3,tag2=Tag2 Content 3},{tag1=Tag1 Content 3,tag2=Tag2 Content 3}]而我迷失了它。有人能指出如何解决这个问题吗?如果有一种更简单的方式,我所做的就是希望你可以帮助我,我会非常感激。 :d

1 个答案:

答案 0 :(得分:1)

已经得到了我的问题的答案。它只是我需要为我的HashMap调用一个新实例,并在将HashMap添加到ArrayList后将其放入。现在是:

public ArrayList<HashMap<String, String>> StringToArrayList (String data) throws Exception{
        ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>();


        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();

        HashMap<String, String> hashMap = new HashMap<String, String>();
        String tag = "";

        xpp.setInput(new StringReader (data));
        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {


            if(eventType == XmlPullParser.START_DOCUMENT) {
                //Document start
            } else if(eventType == XmlPullParser.END_DOCUMENT) {
                //Document end
            } else if(eventType == XmlPullParser.START_TAG) {
                //Get the tag name then set it into tag String variable
                tag = xpp.getName();
            } else if(eventType == XmlPullParser.END_TAG) {
                if(xpp.getName().equals("start")){
                    //Add the hashMap into the list since the start tag now end
                    arrayList.add(hashMap);
                    //Call a new instance
                    hashMap = new HashMap<String, String>();
                }
            } else if ((tag.equals("tag1")) && (eventType == XmlPullParser.TEXT)) {
                hashMap.put(tag,xpp.getText());
                tag = "";
            } else if ((tag.equals("tag2")) && (eventType == XmlPullParser.TEXT)) {
                hashMap.put(tag,Uxpp.getText());
                tag = "";
            }

            eventType = xpp.next();
        }

        return arrayList;
    }