2013-07-24 2 views
0

им в настоящее время пытается читать и XML с веб-сервера в моей Android App, но им не уверен, как искать TAGS, и все примеры я вижу не в отличие от шахты:Android, XMLParser - Чтение XML

<document>  
<producer/> 
<metadata></metadata> 

<recorddata count="111"> 
<row> 
<field name="numint" value="MTAwMQ=="/> 
<field name="Grupo" value="NQ=="/> 
<field name="Link" value="Q29ycmllbnRlcw=="/> 
<field name="Nombre" value="Q29ycmllbnRlcw=="/> 
<field name="Valor" value="MzQwMC4wMA=="/> 
</row> 
</recorddata> 
</document> 

мне нужно прочитать Ряды внутри RECORDATA, но им не уверен, как решить эту проблему, это мой код:

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException 
    { 
     ArrayList<Record> Records = null; 
     int eventType = parser.getEventType(); 
     Record currentRecord = null; 
     while (eventType != XmlPullParser.END_DOCUMENT){ 
      String name = null; 
      switch (eventType){ 
       case XmlPullParser.START_DOCUMENT: 
        Records = new ArrayList(); 
        break; 
       case XmlPullParser.START_TAG: 
        name = parser.getName(); 
        if (name == "row"){ 
         currentRecord = new Record(); 
        } else if (currentRecord != null){ 
         if (name == "numint"){ 
          currentRecord.numint = parser.getText(); 
         } else if (name == "Grupo"){ 
          currentRecord.group = parser.getText(); 
         } else if (name == "Link"){ 
          currentRecord.link= parser.getText(); 
         }else if (name == "Nombre") { 
          currentRecord.name= parser.getText(); 
         }else if (name == "Valor") { 
          currentRecord.value= parser.getText(); 
         } 
        } 
        break; 
       case XmlPullParser.END_TAG: 
        name = parser.getName(); 
        if (name.equalsIgnoreCase("row") && currentRecord != null){ 
         Records.add(currentRecord); 
        } 
      } 
      eventType = parser.next(); 
     } 
     printProducts(Records); 
    } 

нО, список записей пУСТ в конце процесса, и я могу сказать, что что-то делает, потому что есть много записей, и это занимает 2 минуты, пока процесс не закончится ,

Я не уверен, что im, используя getName() правильно, должен ли я проверять поле ??? и если да, то как я знаю, в каком поле im. Должен ли я использовать nextToken() вместо?

+0

теперь я понимаю, что getText() ничего не получает, потому что нет текста: p я попытаюсь внести некоторые изменения –

+0

hmm Я не знаю, как получить значение атрибута «Значение»: p –

+0

Вы когда-нибудь пытались использовать SAX Parser ? – yugidroid

ответ

0

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

parser.getAttributeValue(null, "value"); 

Определение:

public abstract String getAttributeValue (String namespace, String name) 

Взятые из помощи:

* Добавлен в уровне API 1. Возвращает значение атрибута идентифицированные через URI пространства имен и namespace localName. Если пространства имен отключены, пространство имен должно иметь значение NULL. Если текущий тип события не START_TAG, то будет выбрано значение IndexOutOfBoundsException. *

Обратите внимание: Замените все сравнения строк!

name == "row" 

С:

name.equals("row") 

Надеется, что это помогает.

+0

Это действительно немного помогло, список больше не пуст, но теперь Im получает все значения Null, каждый элемент в списке заполняется записями с нулевыми значениями –

+0

Например, Строка 1: numint: Null Группа: Null Ссылка: Null Имя: Null Значение: Null –

+0

Может ли это быть потому, что данные зашифрованы ??????? –

1

Я решил проблему путем переписывания мой код выглядит следующим образом:

case XmlPullParser.START_TAG: 
        name = parser.getName(); 
        if (name.equals("row")){ 
         currentRecord = new Record(); 
        } else if (currentRecord != null) { 
         if(parser.getName().equals("field")) { 
          if(parser.getAttributeValue(null, "name").equalsIgnoreCase("numint")) { 
           currentRecord.numint = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Grupo")) { 
           currentRecord.group = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Link")) { 
           currentRecord.link = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Nombre")) { 
           currentRecord.name = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Valor")) { 
           currentRecord.value = parser.getAttributeValue(null, "value"); 
          } 
         } 
        } 
        break; 

Принимая что-то ответ на Andreaoid, и небольшой настройки, я мог читать де XML файл без проблем

+0

Можете ли вы подтвердить ответ и проголосовать, если это поможет? Благодарю. –

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