我对 Android 中的 XML 解析非常困惑。我试图解析这个 xml 链接/文件:[http://93.186.202.34/vertretungsplan.php?api=10d]。我尝试了不同的教程和示例,但示例 xml 的结构不同,我对此非常困惑。我只想在文本视图或没有额外项目窗口的情况下显示数据。有人可以给我一个想法如何解决这个问题,或者用我的链接举个小例子吗?那真是太好了。:D
问问题
45 次
1 回答
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"));
如果您有任何疑问,请告诉我。
于 2014-01-30T18:46:35.173 回答