(HELP) Parse XML Data in Android

62 Views Asked by At

im very confused about XML Parsing in Android. I tried to parse this xml link/file :[http://93.186.202.34/vertretungsplan.php?api=10d]. I tried different Tutorials and Examples but the example xml´s are structured differently and im very very confused about that. I just want to display the data in a textview or something without extra item windows. Can someone give me an idea how to solve that or maybe a little example with my link ? That would be really nice. :D

1

There are 1 best solutions below

0
On

Here you go...

public class Vertretungsplan {

public Datum datum;
public List<Eintrag> eintragList;
}


public class Datum {

public String stand;
public String fuer;
public String woche;
}


public class Eintrag {

public String klassen;
public String block;
public String vertreter;
public String fach;
public String raum;
public String fach_orig;
public String lehrer_orig;
public String selbststaendiges_arbeiten;
public String entfall;
public String text;
}


public class SaxHandler extends DefaultHandler {

private Vertretungsplan vertretungsplan;
private List<Eintrag> eintragList;
private Eintrag tempEintrag;
private Datum datum;
private String tempVal;

public SaxHandler() {
    vertretungsplan = new Vertretungsplan();
}

public Vertretungsplan getVertretungsplan() {
    return vertretungsplan;
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    tempVal = "";

    if (qName.equalsIgnoreCase("datum")) {
        datum = new Datum();
    }

    if (qName.equalsIgnoreCase("eintraege")) {
        eintragList = new ArrayList<Eintrag>();
    }

    if (qName.equalsIgnoreCase("eintrag")) {
        tempEintrag = new Eintrag();
    }
}

public void characters(char[] ch, int start, int length) throws SAXException {
    tempVal = new String(ch, start, length);
}

public void endElement(String uri, String localName, String qName) throws SAXException {

    if (qName.equalsIgnoreCase("datum")) {
        vertretungsplan.datum = datum;
    } else if (qName.equalsIgnoreCase("stand")) {
        datum.stand = tempVal;
    } else if (qName.equalsIgnoreCase("fuer")) {
        datum.fuer = tempVal;
    } else if (qName.equalsIgnoreCase("woche")) {
        datum.woche = tempVal;
    }

    if (qName.equalsIgnoreCase("eintrag")) {
        eintragList.add(tempEintrag);
    } else if (qName.equalsIgnoreCase("klassen")) {
        tempEintrag.klassen = tempVal;
    } else if (qName.equalsIgnoreCase("block")) {
        tempEintrag.block = tempVal;
    } else if (qName.equalsIgnoreCase("vertreter")) {
        tempEintrag.vertreter = tempVal;
    } else if (qName.equalsIgnoreCase("fach")) {
        tempEintrag.fach = tempVal;
    } else if (qName.equalsIgnoreCase("raum")) {
        tempEintrag.raum = tempVal;
    } else if (qName.equalsIgnoreCase("fach-orig")) {
        tempEintrag.fach_orig = tempVal;
    } else if (qName.equalsIgnoreCase("lehrer-orig")) {
        tempEintrag.lehrer_orig = tempVal;
    } else if (qName.equalsIgnoreCase("selbststaendiges-arbeiten")) {
        tempEintrag.selbststaendiges_arbeiten = tempVal;
    } else if (qName.equalsIgnoreCase("entfall")) {
        tempEintrag.entfall = tempVal;
    } else if (qName.equalsIgnoreCase("text")) {
        tempEintrag.text = tempVal;
    }

    if (qName.equalsIgnoreCase("eintraege")) {
        vertretungsplan.eintragList = eintragList;
    }
}
}


public class SaxParser {
public static Vertretungsplan parse(InputStream is) {
    Vertretungsplan vertretungsplan = null;
    try {
        XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
        SaxHandler saxHandler = new SaxHandler();
        xmlReader.setContentHandler(saxHandler);
        xmlReader.parse(new InputSource(is));
        vertretungsplan = saxHandler.getVertretungsplan();

    } catch (Exception ex) {
        Log.d("XML", "SAXXMLParser: parse() failed");
    }

    return vertretungsplan;
}
}

And from your activity call: (Below is just an example from getting xml from asset folder you can use your preferred way of getting input stream and parse it).

Vertretungsplan vertretungsplan = SaxParser.parse(getAssets().open("test.xml"));

Let me know if you have any doubts.