2015-11-26 4 views
-1

У меня возникает проблема разбора xml с помощью XmlPullParser. Everithing работает отлично, за исключением этой problmatic части:Анализ синтаксиса XML с использованием XmlPullParser

<Device> 

    <Description> 
      Tracker, type CONNECT 
      <Firmware>0240</Firmware> 
    </Description> 

    <Settings> 
    ... 
    </Settings> 

    <Variables> 
    ... 
    </Variables> 
</Device> 

мне нужно разобрать как ОПИСАНИЯ и прошивку. Но я не могу правильно прочитать этот текст описания из-за таких тесных странностей.

То, что я пытался (following this guide):

private Device parseDevice(XmlPullParser parser) throws XmlPullParserException, IOException { 
    Device device = new Device(); 

    parser.require(XmlPullParser.START_TAG, ns, DEVICE); 
    //device.setDescription(readDeviceDescription(parser)); <---tried to parse from here 
    device.setName(readDeviceName(parser)); 

    while (parser.next() != XmlPullParser.END_TAG) { 
     if (parser.getEventType() != XmlPullParser.START_TAG) { 
      continue; 
     } 
     String name = parser.getName(); 

     // Starts by looking for the entry tag 
     switch (name) { 
      case DESCRIPTION: 
       // device.setDescription(readDeviceDescription(parser)); <---and from here 
       device.setFirmware(readDescription(parser, device)); //<-- and inside this method 
       break; 

      case VARIABLES: 
       device.setGroups(readGroups(parser)); 
       break; 

      default: 
       skip(parser); 
       break; 
     } 
    } 
    return device; 
} 

readDeviceDesscription() метод (возможно, проблема заключается здесь):

private String readDeviceDescription(XmlPullParser parser) throws XmlPullParserException, IOException { 
    String result = ""; 
    if (parser.next() == XmlPullParser.TEXT) { 
     result = parser.getText(); 
     parser.next(); 
    } 
    return result; 
} 

Но любая моя попытка заканчивалась с возвращением нуль либо к прошивке или к описанию.

Пожалуйста, помогите. Оцените любой намек.

ответ

1

Вы должны сделать:

private String readDeviceDescription(XmlPullParser parser) throws XmlPullParserException, IOException { 
    String result = parser.getText(); 
    return result; 
} 

Поскольку вы уже расположены на Описание START_TAG GetText вызов возвращает текст внутри тега Description.

Чтобы получить текст тега прошивки вы должны сделать:

if(parser.getEventType() == XmlPullParser.START_TAG && parser.getName().compareTo("Firmware")==0) 
    String firmwareText = parser.getText(); 

Также обратите внимание на this это хороший пример реализации чистой XmlPullParser.

Надеюсь, это поможет.

+0

благодарит за ответ. Но где я должен называть этот метод 'readDeviceDescription'? Из случая 'ОПИСАНИЕ'? – AnZ

+0

Я изменил этот метод, чтобы он работал, потому что вы его на самом деле называете. – Nanoc