2016-10-20 5 views
0

в андроид приложение, я получил следующий XML в результате XMLSerializer:O: Android XmlPullParser не может обрабатывать XML-файл (находками только StartDocument)

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><Network><Cubes><Cube CubeName="null" CubeRF="0cd86d" CubeSN="EQ0837268" /></Cubes><Raeume><Raum RaumName="Wohnzimmer" RaumID="1" RaumRF="b715a" /><Raum RaumName="Schlafzimmer" RaumID="2" RaumRF="b7a40" /><Raum RaumName="Bᅢᄐro" RaumID="3" RaumRF="b7128" /><Raum RaumName="Badezimmer" RaumID="4" RaumRF="b6e0b" /><Raum RaumName="Gᅢᄂstezimmer" RaumID="5" RaumRF="b602f" /></Raeume><Devices><Thermostat DevName="Schlafen" DevRF="b7a40" DevType="1" DevSer="KEQ0446747" DevRaumID="2" /><Thermostat DevName="Bᅢᄐro" DevRF="b7128" DevType="1" DevSer="KEQ0449549" DevRaumID="3" /><Thermostat DevName="Bad" DevRF="b6e0b" DevType="1" DevSer="KEQ0446180" DevRaumID="4" /><Thermostat DevName="Wohnzimmer" DevRF="b715a" DevType="1" DevSer="KEQ0449570" DevRaumID="1" /><Thermostat DevName="Gᅢᄂstezimmer" DevRF="b602f" DevType="1" DevSer="KEQ0450567" DevRaumID="5" /></Devices></Network> 

(не редактируется впоследствии) Но когда я хочу, чтобы обработать это с XmlPullParser, eventType всегда остается 0 - ищет меня, что XmlPullParser не распознает какой-либо другой тег.

код я использую для обработки (как я немецкий, я использовать немецкие имена функций):

public void ladeXmlDatenInCubeNetz(String xmlDatenDateiName) { 
     String xmlDatenString = null; 
     try { 
      FileInputStream xmlDateiInput = new FileInputStream(new File(Environment.getExternalStorageDirectory().getPath()+"/ccdat.xml")); 
      InputStreamReader xmlInputStreamReader = new InputStreamReader(xmlDateiInput); 
      char[] EingabePuffer = new char[xmlDateiInput.available()]; 
      xmlInputStreamReader.read(EingabePuffer); 
      xmlDatenString = new String(EingabePuffer); 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 

     factory.setNamespaceAware(true); 
     XmlPullParser xpp = factory.newPullParser(); 
     xpp.setInput(new StringReader(xmlDatenString)); 
     int eventType = xpp.getEventType(); 

     cDevice4 cd = new cDevice4(); 
     CubeNetz.clear(); 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      if (eventType == XmlPullParser.START_DOCUMENT) { 
       if (eventType == XmlPullParser.START_TAG) {  
        if (xpp.getName().equals("Cube")) { 
          cd.setDeviceTypeSelector(0);  
          cd.setCubeCubeName(xpp.getAttributeValue("", "CubeName")); 
          cd.setCubeCubeRFAddress(xpp.getAttributeValue("", "CubeRF")); 
cd.setCubeCubeSerialNumber(xpp.getAttributeValue("", "CubeSN")); 
          CubeNetz.add(cd); 
         } else if (xpp.getName().equals("Raum")) { 
          cd.setDeviceTypeSelector(1); 
          cd.setRaumName(xpp.getAttributeValue("", "RaumName")); 
          String rid = xpp.getAttributeValue("", "RaumID"); 
          cd.setRaumID(Byte.valueOf(rid)); 
          String aktRaumRF = xpp.getAttributeValue("", "RaumRF"); 
          CubeNetz.add(cd); 
         } else if (xpp.getName().equals("Thermostat")) { 
          cd.setDeviceTypeSelector(2); 
          cd.setDeviceName(xpp.getAttributeValue("", "DevName")); 
          cd.setDeviceRFAddress(xpp.getAttributeValue("", "DevRF")); 
          cd.setDeviceSeriennummer(xpp.getAttributeValue("", "DevSer")); 
          cd.setDeviceRoomID(Integer.valueOf(xpp.getAttributeValue("", "DevRaumID"))); 
          CubeNetz.add(cd); 
         } 
        } 
       } 
       try { 
        xpp.next(); 
       } catch (XmlPullParserException e) { 
        e.printStackTrace(); 
       } 

     } 

     xmlInputStreamReader.close(); 
     xmlDateiInput.close(); 

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

Класс cDevice4 содержит реализацию для доступа к MaxCube-System ELV (контроль отопления).

Я проверил Xml-файл с помощью некоторых онлайн-валидаторов, и это кажется правильным. Итак, где я должен изменить свой код, чтобы обработать этот файл? Заранее спасибо GU_Meyer

+0

пользователь java-json.jar для преобразования xml в json – Pavya

+0

Насколько я понимаю, что было бы проще использовать json? Но должно быть возможно прочитать xml-файл с помощью xmlPullparser, даже если файл сгенерирован xmlSerializer (оба указаны для Android). –

+0

Решенный! Изменение кода на следующее: прочитайте файл правильно: –

ответ

0

Решенный! Изменение кода на следующий (извлеченном только соответствующий код) считывает файл правильно:

  while (eventType != XmlPullParser.END_DOCUMENT) { 
       switch (eventType) { 
        case XmlPullParser.START_TAG : 
         if (xpp.getName().equals("Cube")) { 
// (Rest of code for here) 
         } else if (xpp.getName().equals("Raum")) { 
// (Rest of code for here)       
         } else if (xpp.getName().equals("Thermostat")) { 
// (Rest of code for here) 
         } 
         break; 
       } 
       eventType = xpp.next(); 
      } 

Таким образом, замена если ..., то {} с помощью переключателя ... случай решила. Спасибо всем, кто думает о моей проблеме.

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

  • Нет связанных вопросов^_^