Frage

Ich bin versucht, ein großes XML-Dokument zu lesen, und ich wollte es in Stücken vs XmlDocument Weg zu tun, die gesamte Datei in dem Speicher zu lesen. Ich weiß, ich XmlTextReader verwenden kann, dies zu tun, aber ich habe mich gefragt, ob jemand SAX für .NET verwendet hat? Ich weiß, dass Java-Entwickler darauf schwören, und ich habe mich gefragt, ob es sich lohnt, es zu versuchen, und wenn ja, was sind die Vorteile in der Benutzung. Ich suche Besonderheiten.

War es hilfreich?

Lösung

Wenn Sie sprechen SAX für .NET , das Projekt wird nicht aufrechterhalten werden kann. Die letzte Veröffentlichung war mehr als 2 Jahre. Vielleicht haben sie es auf dem letzten Release perfekt, aber ich würde nicht auf sie wetten. Der Autor, Karl Waclawek, scheint aus dem Netz verschwunden.

Wie bei SAX unter Java? Sie wetten, es ist toll. Leider wurde SAX nie als Standard entwickelt, so dass alle von den Nicht-Java-Ports wurden für ihre eigenen Bedürfnisse einen Java-API anzupassen. Während DOM ein ziemlich lausiger API ist, hat es den Vorteil, für mehrere Sprachen und Umgebungen konzipiert wurde, so ist es einfach in Java, C #, JavaScript, C, et al.

implementieren

Andere Tipps

Wenn Sie nur schnell den Job erledigen wollen, besteht die XmlTextReader zu diesem Zweck (in .NET).

Wenn Sie einen de-facto-Standard (und in may anderen Programmiersprachen) zu lernen, die stabil ist und der Sie zwingt, sehr effizient zu kodieren und elegant, die aber auch sehr flexibel ist, dann in SAX aussehen. Aber verschwenden Sie nicht Ihre Zeit, wenn Sie die Erstellung sehr esoterisch XML-Parser sein werden. Stattdessen für Parser die die nächste Generation Parser (wie XmlTextReader) für die jeweilige Plattform.

SAX Ressourcen
SAX wurde ursprünglich für Java geschrieben, und Sie können das Original-Open-Source-Projekt finden, das seit mehreren Jahren stabil geblieben ist, hier: http://sax.sourceforge.net/

Es ist ein C # Port des gleichen Projektes hier (mit HTML-Dokumenten als Teil des Source-Download); es ist auch stabil: http://saxdotnet.sourceforge.net/

Wenn Sie die C # -Implementierung mögen, könnten Sie immer auf Referenzierung COM-DLLs über ComInterop greifen MSXML3 oder höher verwenden: http://msdn.microsoft.com/en-us/library/ms994343.aspx

Die Artikel, die von der Java-Welt kommen, aber das ist wahrscheinlich die Konzepte veranschaulichen Sie müssen mit diesem Ansatz erfolgreich sein (es auch herunterladbare Java-Quellcode sein kann, die als nützlich erweisen könnten und leicht genug sein kann, um C # zu konvertieren):

Es wird eine aufwändige Implementierung sein. Ich habe nur SAX zurück in meinen pre-.NET Tagen verwendet, aber es erfordert einige ziemlich fortgeschrittene Programmiertechniken. An diesem Punkt ist es einfach nicht die Mühe wert.

Interessantes Konzept für einen Hybrid-Parser
Dieser Thread beschreibt ein Hybrid-Parser, die .NET XmlTextReader verwendet einen Parser zu implementieren, die eine Kombination von DOM und SAX Vorteile bietet ...
http://bytes.com/groups/net-xml/178403- XmlTextReader-versus-dom

Ich glaube, es gibt keine Vorteile SAX zumindest durch zwei Gründen verwendet:

  1. SAX ist ein "Push" -Modell während XmlReader ein Pull-Parser ist, die eine Reihe von Vorteilen .
  2. Die Abhängigkeit von einer 3rd-Party-Bibliothek, anstatt einen Standard-.NET-API verwenden.

Ich persönlich ziehe das SAX-Modell als das XmlReader einige wirklich ärgerlich Fallen hat, die Fehler in Ihrem Code kann dazu führen, dass Ihr Code verursachen könnten Elemente überspringen. Die meisten Code würde rund eine Weile strukturiert sein (rdr.Read ()) Modell, aber wenn Sie irgendwelche „Readstring“ oder „ReadInnerXml ()“ innerhalb dieser Schleife werden Sie sich Elemente auf der nächsten Iteration zu überspringen.

Als SAX Ereignis basiert dies nie hapen wie Sie keine Operationen durchführen können, die Ihre Parser suchen grünes Licht führen würde.

Mein persönliches Gefühl ist, dass Microsoft den Begriff erfunden hat, dass der XmlReader ist besser mit der Erklärung des Push / Pull-Modells, aber ich wirklich nicht kaufen. So Microsoft denken, dass Sie nicht über eine State-Maschine mit XmlReader erstellen müssen, die keinen Sinn für mich macht, aber wie auch immer, es ist nur meine Meinung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top