2014-09-23 2 views
1

Я разбираю этот xml. Я хочу получить все значения из атрибутов, но после многого поиска я могу получить только первое значение элемента. Может кто-нибудь дать мне знать, как я могу получить весь идентификатор из всех предметов. Я приклеил мой код такжеparse xml атрибуты в android

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

некоторых отступов и верстка поможет читаемости! –

+0

спасибо. У меня возникла проблема с вставкой кода. опубликовано в первый раз –

+0

Насколько я вижу, он должен работать, как вы знаете, что он не работает, вы ничего не делаете с атрибутами, которые вы возвращаете? –

ответ

0

В getAttributes вызове getAttributeCount который, according to the doc (курсив мой):

Возвращает число атрибутов текущего стартового тега, или -1, если курсор нт тип события не 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 –

Смежные вопросы