SAX: Wie man den Inhalt eines Elements
Ich habe einige Schwierigkeiten zu verstehen, Parsen von XML-Strukturen mit SAX. Sagen wir mal es gibt den folgenden XML-Code:
<root>
<element1>Value1</element1>
<element2>Value2</element2>
</root>
- und eine String-variable myString
.
Gerade durch mit den Methoden startElement, endElement() und characters() ist einfach. Aber ich verstehe nicht, wie kann ich Folgendes erreichen:
Wenn das aktuelle element gleich element1
speichern seinen Wert value1
im myString
. Soweit ich das verstehe, gibt es nichts wie:
if (qName.equals("element1")) myString = qName.getValue();
Denke, ich denke nur zu kompliziert 🙂
Robert
InformationsquelleAutor Robert Strauch | 2010-11-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit SAX, müssen Sie pflegen Ihre eigenen Stapel. Sie können etwas tun, wie dies für sehr einfache Verarbeitung:
Wenn Sie möchten, dass code wie in deinem Beispiel, dann müssen Sie das DOM-Modell eher als SAX. DOM ist einfacher code, aber ist in der Regel langsamer und mehr Speicher teuer als SAX.
Empfehle ich die Verwendung einer Drittanbieter-Bibliothek anstelle der built-in-Java-XML-Bibliotheken für die DOM-manipulation. Dom4J scheint ziemlich gut, aber es gibt wahrscheinlich auch andere Bibliotheken, die da draußen auch.
Vielleicht die bevorzugte Nutzung von StringBuilder
InformationsquelleAutor Cameron Skinner
Diese Lösung funktioniert für ein einzelnes element mit text-Inhalt. Wenn element1 hat mehrere sub-Elemente etwas mehr Arbeit notwendig ist. Brians Bemerkung ist sehr wichtig.
Wenn Sie mehrere Elemente oder eine generische Lösung dieser könnte Ihnen dabei helfen. Getestet habe ich es mit einem 300+MB xml-Datei und es ist immer noch sehr schnell:
InformationsquelleAutor jvwilge
Sollten Sie notieren Sie die Inhalte über
characters()
, fügen Sie ein StringBuilder-Objekt für jeden Aufruf und speichern nur den verketteten Wert auf dieendElement()
nennen.Warum ? Da
characters()
aufgerufen werden kann mehrfach für den element-Inhalt - jeder Aufruf von verweisen auf eine sukzessive Folge, dass text-element.InformationsquelleAutor Brian Agnew