XML Datei parsen!

S

Sico

Erfahrenes Mitglied
51
Hallo,


kennt jemand einen Codeschnippsel zum parsen einer XML Datei?

Gruß

Sico
 
Mein kleiner XMLParser.
Code:
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();
  }

}
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
127
swa00
swa00
S
Antworten
33
Aufrufe
2.668
Sempervivum
S
B
Antworten
4
Aufrufe
487
bb321
B
Zurück
Oben Unten