(帮助)在Android中解析XML数据

时间:2014-01-30 17:21:13

标签: android xml parsing hyperlink parsexml

我对Android中的XML解析非常困惑。 我试图解析这个xml链接/文件:[http://93.186.202.34/vertretungsplan.php?api=10d]。 我尝试了不同的教程和示例,但示例xml的结构不同,我非常非常困惑。 我只是想在textview中显示数据,或者没有额外的项目窗口。 有人可以给我一个想法如何解决这个或者我的链接可能是一个小例子? 那会非常好。 :d

1 个答案:

答案 0 :(得分:0)

你去......

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;
}
}

从您的活动电话:(以下只是从资产文件夹中获取xml的示例,您可以使用您首选的获取输入流并解析它的方式)。

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

如果您有任何疑问,请告诉我。