Разбор XML (Xmlpullparser). Ошибка: предварительное условие: START_TAG (позиция: END_TAG </GUID> @ 4: 54 в java.io.InputStreamReader@358d99b) - PullRequest
0 голосов
/ 09 января 2019

Я получаю ошибку:

precondition: START_TAG (position:END_TAG </GUID>@4:54 in java.io.InputStreamReader@358d99b) 

Я довольно долго пытался понять, что не так. Сначала я подумал, что это проблема с буквами верхнего и нижнего регистра, но я думаю, что исправил это с помощью метода equalsIgnoreCase. Я попытался посмотреть в Интернете, но не смог найти ничего, что помогло бы мне решить эту проблему.

Это моя основная деятельность:

package com.example.retar.xmlparsertest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("čič", "on start");
        parseXML();
        Log.i("čič", "konec prasexml");

    }

    private void parseXML(){
        Log.i("čič", "začetek parsexml");
        XmlPullParserFactory parserFactory;
        try {
            parserFactory = XmlPullParserFactory.newInstance();
            parserFactory.setNamespaceAware(true);
            XmlPullParser parser = parserFactory.newPullParser();
            InputStream inputStream = getAssets().open("mix_stations.xml");
            parser.setInput(inputStream, null);
            processParsing(parser);

        }catch (XmlPullParserException e){
            Log.i("čič", e.getMessage());

        }catch (IOException e){
            Log.i("čič", e.getMessage());

        }

    }

    private void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException{
        Log.i("čič", "začetek procesparsing");
        ArrayList<Dispenser> mDispensers = new ArrayList<>();
        int eventType = parser.getEventType();
        Dispenser currentDispenser = null;
        int i = 0;

        while (eventType != XmlPullParser.END_DOCUMENT){

            String eltName;

            switch (eventType){

                case XmlPullParser.START_TAG:
                eltName = parser.getName();

                if("Table1".equalsIgnoreCase(eltName)) {
                    i++;
                    Log.i("čič", Integer.toString(i));
                    currentDispenser = new Dispenser();
                    mDispensers.add(currentDispenser);
                }else if (currentDispenser != null){
                    if("GUID".equalsIgnoreCase(eltName)){
                        Log.i("GUID", eltName);
                        currentDispenser.setGuid(parser.nextText());
                        Log.i("čič2", "boys i did something");
                    }if("Code".equalsIgnoreCase(eltName)){
                        currentDispenser.setCode(parser.getText());
                    }if("DispenserCommercialCode".equalsIgnoreCase(eltName)){
                        currentDispenser.setDispenserCommercialCode(parser.getText());
                    }if("M2MBoxSerialNumber".equalsIgnoreCase(eltName)){
                        currentDispenser.setM2MBoxSerialNumber(parser.getText());
                    }if("MonitorSerialNumber".equalsIgnoreCase(parser.nextText())){
                        currentDispenser.setMonitorSerialNumber(parser.getText());
                    }if("PrinterSerialNumber".equalsIgnoreCase(eltName)){
                        currentDispenser.setPrinterSerialNumberString(parser.getText());
                    }if("AccountName".equalsIgnoreCase(eltName)){
                        currentDispenser.setAccountName(parser.getText());
                    }
                }
                break;
            }
            eventType = parser.next();



        }
    }
}

Класс моих дозаторов:

package com.example.retar.xmlparsertest;

public class Dispenser {

        private String mGuid;
        private String mCode;
        private String mDispenserCommercialCode;
        private String mM2MBoxSerialNumber;
        private String mMonitorSerialNumber;
        private String mPrinterSerialNumberString;
        private String mAccountName;


        public String getGuid() {
            return mGuid;
        }

        public void setGuid(String guid) {
            mGuid = guid;
        }

        public String getCode() {
            return mCode;
        }

        public void setCode(String code) {
            mCode = code;
        }

        public String getDispenserCommercialCode() {
            return mDispenserCommercialCode;
        }

        public void setDispenserCommercialCode(String dispenserCommercialCode) {
            mDispenserCommercialCode = dispenserCommercialCode;
        }

        public String getM2MBoxSerialNumber() {
            return mM2MBoxSerialNumber;
        }

        public void setM2MBoxSerialNumber(String m2MBoxSerialNumber) {
            mM2MBoxSerialNumber = m2MBoxSerialNumber;
        }

        public String getMonitorSerialNumber() {
            return mMonitorSerialNumber;
        }

        public void setMonitorSerialNumber(String monitorSerialNumber) {
            mMonitorSerialNumber = monitorSerialNumber;
        }

        public String getPrinterSerialNumberString() {
            return mPrinterSerialNumberString;
        }

        public void setPrinterSerialNumberString(String printerSerialNumberString) {
            mPrinterSerialNumberString = printerSerialNumberString;
        }

        public String getAccountName() {
            return mAccountName;
        }

        public void setAccountName(String accountName) {
            mAccountName = accountName;
        }


    }

Пример из файла XML:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table1>
    <GUID>88b008cb-0bb9-e511-8137-78acc0f7ecd6</GUID>
    <Code>XXX_XXX_XXX_01</Code>
    <DispenserSerialNumber>111111111-111111</DispenserSerialNumber>
    <DispenserCommercialCode>BARBIL HA400-16 (2008)</DispenserCommercialCode>
    <SerialNumber>CZ1111114</SerialNumber>
    <Name>XXX - CZC8395XJ4</Name>
    <M2MBoxSerialNumber>862570023687691</M2MBoxSerialNumber>
    <Name1>XXX - 862570023687691</Name1>
    <MonitorSerialNumber>FVL111116146</MonitorSerialNumber>
    <Name2>XXX - FVLDCH111116</Name2>
    <PrinterSerialNumber>2011111A</PrinterSerialNumber>
    <Name3>XXX - 2011111A</Name3>
    <ShakerSerialNumber>450000000-834033</ShakerSerialNumber>
    <Name4>XXX - 110000000-111111</Name4>
    <AccountName>Farbenpartner Graz</AccountName>
  </Table1>
</NewDataSet>
...