我目前正在使用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
答案 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;
}