2014-09-23 50 views
1

我正在解析这个xml。我想从属性中获取所有值,但是在搜索了很多后,我只能获取第一个值。任何人都可以让我知道如何从所有物品中获得所有ID。我已经贴上我的代码也解析android中的xml属性

XML:

<query> 
    <item id='9173' name='A'/> 
    <item id='9174' name='B'/> 
    <item id='9175' name='C'/> 
    <item id='9176' name='D'/> 
    <item id='9174' name='E'/> 
</query> 

代码:

boolean done = false; 
while (!done) { 
    int eventType = parser.next(); 
    if (eventType == XmlPullParser.START_TAG) { 
    } 
    else if (eventType == XmlPullParser.END_TAG) { 
     Map<String,String> attributes = getAttributes(parser); 
     if (parser.getName().equals("query")) { 
      done = true; 
     } 
    } 
} 
private Map<String,String> getAttributes(XmlPullParser parser) throws Exception { Map<String,String> attrs=null; 
    int acount=parser.getAttributeCount(); 
    if(acount != -1) { 
     Log.d(MY_DEBUG_TAG,"Attributes for ["+parser.getName()+"]"); 
     attrs = new HashMap<String,String>(acount); 
     for(int x=0;x<acount;x++) { 
      Log.d(MY_DEBUG_TAG,"\t["+parser.getAttributeName(x)+"]=" + 
        "["+parser.getAttributeValue(x)+"]"); 
      attrs.put(parser.getAttributeName(x), parser.getAttributeValue(x)); 
     } 
    } 
    else { 
     throw new Exception("Required entity attributes missing"); 
    } 
    return attrs; 
} 
+0

一些缩进和格式化,将有助于可读性! – 2014-09-23 07:33:20

+0

谢谢。我在粘贴代码时遇到了问题。第一次发布 – 2014-09-23 07:40:04

+0

据我所知,它应该工作,你怎么知道它不工作,你没有做任何与你检索的属性? – 2014-09-23 08:41:27

回答

0

getAttributes你打电话getAttributeCount其中,according to the doc(重点煤矿):

返回数字当前开始标记的属性,或-1如果curre NT事件类型不START_TAG

随着你如果条件中庸之道确保你是一个END_TAG前,这可不行,你的电话getAttributes应始终抛出异常。

你或许应该重写它像这样(免责声明:未测试):

boolean done = false; 
while (!done) { 

    if (eventType == XmlPullParser.START_TAG) { 

     if (parser.getName().equals("query")) { 
      done = true; 
     } else if (parser.getName().equals("item")) { 
      Map<String,String> attributes = getAttributes(parser); 
     } 
    } 
    else if (eventType == XmlPullParser.END_TAG) { 

    } 
    int eventType = parser.next(); 
} 
+0

这将工作。谢谢你的帮助@ Pierre Rust – 2014-09-23 10:45:02