Java - XML parsen
-
Hallo,
beim arbeiten mit den Java Klassen (org.w3c.*) für das Parsen mit DOM ist mir leider aufgefallen, dass z.B. getChildNodes() auch Zeilenumbrüche und Kommentare in den xml Dateien einliest bzw. als Kindknoten erkennt.
Ich kann leider kein JDom verwenden. Auch andere Java XML Klassen, die nicht im Standard JRE enthalten sind, fallen raus.
Nun meine Frage: Bleibt mir was anderes übrig, als mit den vorhandenen org.w3c.* Klassen zu abeiten und dieses Parse Problem umständlich zu beheben?
Und besteht das selbe Problem eigentlich auch mit den SAX Klassen?
-
Hm wo ist denn genau das Problem? So umständlich ist das eigentlich nicht (es ist aber natürlich richtig, dass JDom wesentlich komfortabler zu benutzen ist, kein Thema). Aber mit den Java-Klassen kann man auch ganz gut arbeiten (man kann sich ja auch ein paar simple Hilfs-Methoden stricken).
SAX ist, was sowas angeht, die Umständlichkeit in Person Wenn du da einfach nur die vorgegebenen Java-Klassen benutzt ist das wesentlich komplizierter im Vergleich zu DOM.
-
Hallo,
das Problem ist wie gesagt, dass man mit getChildNodes() ein Array bekommt in dem auch Zeilenumbrüche und Kommentarblöcke als Item vorkommen, und nicht nur die tatsächlichen XML Tags.
Ich versuche das mal mit SAX, evtl. werden dabei wirklich nur die Tags berücksichtigt. Aber selbst wenn nicht, ist es mit SAX vermutlich leichter die Zeilenumbrüche und Kommentare zu ignorieren.
-
Es ist eigentlich kein Problem, die Textknoten zu ignorieren. Die Methode getNodeType() liefert einen Wert, mit dem man den Typ bestimmen kann (z.B. TEXT_NODE oder ELEMENT_NODE).
So würde man in der Verarbeitung der Kindknoten in einer Schleife beispielsweise alle TEXT_NODE-Knoten überspringen.
-
Danke für den Hinweis. So muss ich das wohl machen.
-
Ja eben, wie gesagt so kompliziert ist das nicht. Sowas lässt sich in ein paar Hilfsmethoden schön verpacken.
Mit SAX wirst du bei sowas nicht glücklich. Das ist wesentlich aufwändiger diese Sachen da rauszuparsen, da du mit Callback-Methoden arbeiten musst, und du dir dann quasi immer in Membervariablen den "Status" deines Parsingvorgangs ablegen musst, um dann in den entsprechenden Callback-Methoden darauf zu reagieren.
-
Wem DOM zu schwergewichtig und SAX zu umständlich ist, sollte sich mal StAX anschauen.