2015-06-18 2 views
-1

Нужна ваша помощь, чтобы решить эту проблему: Пытаясь разобрать этот XML -XmlPullParserException во время синтаксического анализа XML с XMLPullParser

<LungProtocol><configuration name="FLUS Sitting"> 
    <segment order="1" name="left upper anterior"> 
    <segment order="2" name="left lower anterior"> 
</configuration> 
<configuration name="FLUS Supine"> 
    <segment order="1" name="left upper anterior"> 
    <segment order="2" name="left lower anterior"> 
</configuration></LungProtocol> 

С следующей функцией -

public List<LungSegment> parse(InputStream is, String configuration) { 
     try { 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setNamespaceAware(true); 
     XmlPullParser parser = factory.newPullParser(); 
     segment = new LungSegment(); 
     parser.setInput(is, null); 
     parser.require(XmlPullParser.START_TAG, null, "configuration"); 
     int eventType = parser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      String tagname = parser.getName(); 
      switch (eventType) { 
      case XmlPullParser.START_TAG: 
       if(("configuration").equalsIgnoreCase(tagname) && parser.getAttributeValue(null, "name").equalsIgnoreCase(configuration)){ 
        eventType = parser.next(); 
        //eventType = parser.next(); 
        tagname = parser.getName(); 
        Log.v("XMLTAG", "configuration = "+configuration); 
       if (("segment").equalsIgnoreCase(tagname)) { 
        // create a new instance of segment 
         segment = new LungSegment(); 
         segment.setSegmentName(parser.getAttributeValue(null, "name")); 
         segment.setSegmentOrder(Integer.parseInt(parser.getAttributeValue(null, "order"))); 
       } 
       } 
       break; 

      case XmlPullParser.END_TAG: 
       if (tagname.equalsIgnoreCase("segment")) { 
        // add segment object to list 
        segments.add(segment); 
       } else if (("configuration").equalsIgnoreCase(tagname) && parser.getAttributeValue(null, "name").equalsIgnoreCase(configuration)) { 
         return segments; 
       } 
       break; 
      } 
      eventType = parser.next(); 
     } 

    } catch (XmlPullParserException e) {e.printStackTrace();} 
    catch (IOException e) {e.printStackTrace();} 

    return segments; 
} 

где конфигурация является атрибутом имя конфигурации тега , Но получение исключения -

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}configuration (position:START_DOCUMENT [email protected]:1 in [email protected]) 

Пожалуйста, помогите мне, где я иду не так.

+0

Не должен быть концевой тег для «» (например, «») в конце документа xml? –

+0

Да, отредактировал вопрос. Я использую end tag. –

+1

Не уверен, что это исправление. Но логично заменить эту строку: parser.require (XmlPullParser.START_TAG, null, «configuration»); с этим: parser.require (XmlPullParser.START_TAG, null, "LungProtocol"); –

ответ

0

сделать эти два изменения в коде:

  1. Make XML действительный. Теги сегмента не заканчиваются. Они должны быть: <segment order="1" name="left upper anterior"/>

  2. Удалить линию parser.require(XmlPullParser.START_TAG, null, "configuration");

Все остальное выглядит отлично. Я также смог запустить ваш код.

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