S
Sico
Erfahrenes Mitglied
- 51
Hallo,
kennt jemand einen Codeschnippsel zum parsen einer XML Datei?
Gruß
Sico
kennt jemand einen Codeschnippsel zum parsen einer XML Datei?
Gruß
Sico
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion erfordert derzeit den Zugriff auf die Seite über den integrierten Safari-Browser.
public class XMLParser {
public static History parse(String xml) {
try {
InputStream xmlStream = new ByteArrayInputStream(xml.getBytes());
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(xmlStream);
Element rootNode = doc.getDocumentElement();
History h = new History();
h.setTrackingId(rootNode.getAttribute(RestInterface.HISTORY_TRACKINGID));
h.setLastChecked(parseDate(rootNode.getAttribute(RestInterface.HISTORY_LASTCHECKED), false));
h.setDelivered(Boolean.parseBoolean(rootNode.getAttribute(RestInterface.HISTORY_DELIVERED)));
NodeList events = rootNode.getElementsByTagName(RestInterface.EVENT);
for (int i = 0; i < events.getLength(); i++) {
Element event = (Element) events.item(i);
Event e = new Event();
h.addToEvents(e);
e.setEventTime(parseDate(event.getAttribute(RestInterface.EVENT_EVENTTIME), true));
e.setRecieveTime(parseDate(event.getAttribute(RestInterface.EVENT_RECIEVETIME), false));
}
return h;
} catch (Exception e) {
Log.e(Const.LOG_TAG, "An exception occured!", e);
return null;
}
}
private static String getElementValue(Element element) {
String val = element.getChildNodes().item(0).getNodeValue();
if (val == null)
return "";
// hier bin ich nicht sicher, ob das notwendig ist
// ggf. funktioniert auch ein replace von "\n"
if (val.contains("\n")) {
val = val.replace("\n", "§§");
StringTokenizer t = new StringTokenizer(val, "§§");
val = "";
while (t.hasMoreTokens()) {
val = val + " " + t.nextToken().trim();
}
}
return val.trim();
}
private static Date parseDate(String dateString, boolean needToFix) {
if (StringUtils.isEmpty(dateString))
return null;
String[] parts = dateString.split("T");
if (parts == null || StringUtils.isEmpty(parts[0]) || StringUtils.isEmpty(parts[1]))
return null;
String[] date = parts[0].split("-");
String[] time = parts[1].split(":");
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, Integer.parseInt(date[0]));
cal.set(Calendar.MONTH, Integer.parseInt(date[1]) - (needToFix ? 1 : 0));
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date[2]));
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0]));
cal.set(Calendar.MINUTE, Integer.parseInt(time[1]));
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}
}