SAX-Parser vs XMLPull-Parser

Ich verstehe den Unterschied zwischen dem, wie der SAX-Parser gegen den XMLPull-Parser arbeitet. In der Tat gibt es eine ziemlich gute Erklärung hier:

Http://www.firstobject.com/xml-reader-sax-vs-xml-pull-parser.htm Der Artikel ist ein bisschen .NET zentrisch, aber die Konzepte gelten.

Während ich mit der Meinung des Autors einverstanden bin, dass der Pull-Parser einfacher zu arbeiten ist, bin ich ziemlich verwirrt, welche Art von Parser in welchen Situationen besser wäre. Wenn jemand ein Licht abgeben und mich auf etwas mehr lesen könnte, würde ich es schätzen.

Vielen Dank.

  • XmlPullParser bekommt untergeordnete Knoten
  • XmlPullParser: erhalten inneren Text einschließlich XML-Tags
  • Android benutzerdefinierte XML-Parser nicht zu lösen android Namespace
  • Android org.xmlpull.v1.XmlPullParserException beim Analysieren von XML
  • ArrayIndexOutOfBoundsException in android's KXmlParser
  • XmlPullParserException nur auf ICS
  • Wie erstelle ich ein AttributSet in Android?
  • Xml Puller Vermögenswerte xml
  • 7 Solutions collect form web for “SAX-Parser vs XMLPull-Parser”

    Ich finde, dass sie beide saugen. (Und ich habe eine bessere Lösung vorschlagen)

    Sie sollten die Simple Annotation-basierte XML-Bibliothek verwenden . Ich liebe es und nutze es für alle meine Projekte. Wenn Sie das Tutorial lesen, dann denke ich, dass Sie feststellen werden, dass es in der Lage ist, alles zu tun, was Sie wollen und viel schneller und mit weniger Code. (So ​​wird weniger Bug anfällig) Intern verwendet die Bibliothek die Parser, die du gefragt hast, um das schwere Heben zu machen.

    Sie können dann lesen, meine Blog-Post auf einschließlich es in einem Android-Projekt, wenn Sie wollen. (Es wird in jeder Version von Android von atleast 1.5 up, die für jeden grundsätzlich bedeutet)

    Es hängt ganz von der Situation ab, zB wenn die XML-Datei wirklich groß ist, als man sich nicht für DOM-Parser entscheiden kann, da sie zuerst die Datei in den Speicher bringen und dann wird es analysiert und ich habe festgestellt, dass das Parsen einer Datei mit der Größe n Benötigt 7n Speicherplatz. In diesem Fall sollten Sie sich für SAX-Parser sein Licht entscheiden und verbrauchen weniger Speicher.

    Zweiter Fall ist, wenn die Datei nicht wirklich groß ist, in diesem Fall können Sie für XML Puller gehen, weil in diesem haben Sie die volle Kontrolle über die xml können Sie überspringen den Parsing Zyklus irgendwo, wo das nicht möglich ist in SAX. Also, wenn das Tag, das Sie suchen, ist das erste in der Datei dann warum würden Sie für ganze Datei gehen.

    Also so weit ich weiß, wenn man nur Geschwindigkeit mit kleinen Datei betrachten, gehen Sie mit XML-Parser und wenn die Datei groß ist und Sie wollen, dass Sie alle dann mit SAX gehen.

    Beide Parser sind im Grunde das gleiche Gedächtnis / Zeitweise. Das einzige, was ist, dass mit Pull-Parser können Sie ziehen die Ereignisse wie Startelement und Endelement und nur diejenigen, die Sie wollen.

    Wo wie bei android sax parsers, hast du keine wahl, du legst einfach Code, wo du willst, aber du musst alle Ereignisse einbeziehen.

    Hier ist ein Link, den Sie für weitere Lesung verweisen können.

    Pull und Sax sind ähnlich wie die beiden Low-Level-Streaming-Ansätze, die schneller und effizienter als DOM sind, aber Pull hat ein paar Vorteile gegenüber SAX:

    Pull ist einfacher zu implementieren als SAX, weil man den Zustand Ihres Parsers nicht pflegen muss (mit zusätzlichen Variablen, um wissen zu können, an welchem ​​Ort sich dein Parser derzeit im XML-Baum befindet). Die verschachtelten Schleifen in deinem Pull-Parser-Code werden mehr oder weniger der XML-Hierarchie deines Dokuments entsprechen, also denke ich, dass der Pull-Parser-Code auch besser lesbar ist als der SAX-Parser-Code.

    Mit Pull-Parser-Code kannst du ganze Blöcke überspringen, die du nicht parsen willst, also ist es auch effizienter als SAX, der immer die Hauptinformationen aller Knoten extrahiert. Mit einem Pull-Parser kannst du auch das Parsing jederzeit stoppen, wenn du die benötigten Informationen abgerufen hast, was bei SAX nicht möglich ist.

    Außerdem können Sie einen SAX-Parser mit einem Pull-Parser implementieren. Das Gegenteil ist nicht möglich.

    Aus all diesen Gründen glaube ich, dass der Pull-Parser SAX in allen Situationen überlegen ist, aber wie SAX ist es nicht trivial, richtig zu implementieren und du musst vorsichtig sein. Wenn Sie nicht brauchen, die Low-Level-Geschwindigkeit Vorteile von Pull und SAX und Ihr XML ist sauber, können Sie immer eine übergeordnete Parsing-Bibliothek wie Simple , um die harte Arbeit für Sie zu tun.

    Ich finde das SAX-Modell in einer bestimmten Situation einfacher zu arbeiten: Wo wirst du deine eigene In-Memory-Darstellung des gesamten Dokuments (oder zumindest wichtiger Teile davon) mit benutzerdefinierten Datenstrukturen erstellen. (Wenn Sie nicht besonders über die Datenstruktur sind, dann macht der DOM-Parser das schon.)

    Ich habe eine bessere und effizientere Ausgabe gefunden, während ich SAX anstelle von XMLPullParser verwende … Mein Szenario ist es, die Attribute unter einem XML-Tag zu analysieren, ich könnte es einfach machen und es in die Datenbank reibungslos einfügen … Ich denke, es hängt von Situationen ab, wann Ich muss auf eine XML-Datei schreiben Ich bevorzuge DOM Parser …

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { currentElement = true; db = new DatabaseHelper(thecontext); if (qName.equals("Asa.Amms.Data.Entity.User")) { int length = attributes.getLength(); for (int i = 0; i < length; i++) { String name = attributes.getQName(i); if (name.equals("Id")) { id = Integer.parseInt(attributes.getValue(i)); } if (name.equals("Login")) { LoginID = attributes.getValue(i).toString(); } if (name.equals("Name")) { Name = attributes.getValue(i).toString(); } if (name.equals("Password")) { Password = attributes.getValue(i).toString(); } if (name.equals("ProgramOfficerId")) { user_ProgramOfficerId = Integer.parseInt(attributes.getValue(i).toString()); } } Log.i("Baal dhukbe", id + LoginID + Name + Password); db.insertUser(id, LoginID, Name, Password, user_ProgramOfficerId); } } 

    Ich würde empfehlen, mit dem XmlPullParser ein .. der Sax Parser nicht abholen den Tag aus einem Feed in meinem Test .. xmlpullparser hat das leicht =) hängt auch von Ihren Vorlieben auch ab

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.