SAX vs XmlTextReader - SAX in C#
Ich bin versucht zu Lesen, ein großes XML-Dokument, und ich wollte, es zu tun in Brocken vs XmlDocument
's Weg liest die gesamte Datei in den Speicher. Ich weiß, dass ich verwenden können XmlTextReader
dies zu tun, aber ich Frage mich, ob jemand verwendet hat, SAX .NET? Ich weiß, Java-Entwickler, die darauf schwören und ich Frage mich, ob es sich lohnt, es zu versuchen, und wenn ja, was sind die Vorteile bei der Verwendung. Ich bin auf der Suche nach Besonderheiten.
XmlTextReader
ist veraltet und für den direkten Einsatz. Es sollte nur verwendet werden, erstellen Sie Ihre eigenen XmlReader
Klasse durch Ableitung von XmlTextReader
. XmlReader.Create
sollte stattdessen verwendet werden.Nicht Sie haben keine Quelle, Beweis, bitte?
Siehe die "Bemerkungen" an XmlTextReader-Klasse: "Hinweis: In der .NET Framework version 2.0, die Praxis wird empfohlen, zu erstellen XmlReader-Instanzen mithilfe der XmlReader.Create-Methode. Dies ermöglicht Ihnen, den vollen nutzen aus den neuen Funktionen in dieser Version eingeführt. Weitere Informationen finden Sie unter Erstellen von XML-Leser."
InformationsquelleAutor cgreeno | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du redest SAX .NET, das Projekt scheint nicht beibehalten werden. Der Letzte release war vor mehr als 2 Jahren. Vielleicht haben Sie es perfekt auf die Letzte Version, aber ich würde nicht darauf Wetten. Der Autor, Karl Waclawek, scheint verschwunden zu sein aus dem Netz.
Als für SAXOPHON unter Java? Sie Wette, es ist toll. Leider SAX wurde nie entwickelt, als standard, so dass alle nicht-Java-ports wurden die Anpassung einer Java-API für Ihre eigenen Bedürfnisse. Während DOM ist eine ziemlich miese API, es hat den Vorteil, dass entworfen worden, für mehrere Sprachen und Umgebungen, so dass es einfach zu implementieren in Java, C#, JavaScript, C, et al.
Oh, es mag auch erwähnenswert sein, dass die offizielle SAX-Implementierung von Java ist die Tabelle und wurde unverändert für sogar länger als SAX .NET. Das einzige mal, dass Verbesserungen notwendig sein, um entweder codebase ist im Grunde, wenn der XML-standard entwickelt sich immer mehr.
InformationsquelleAutor Craig Trader
Wenn Sie nur wollen, um den job zu erledigen schnell, die XmlTextReader-vorhanden ist, für diesen Zweck (in .NET).
Wenn Sie möchten, zu lernen, eine de-facto-standard (und in möglicherweise anderen Programmiersprachen), die stabil ist und die Kraft Sie zu code sehr effizient und elegant, aber auch extrem flexibel, dann suchen Sie in SAX. Jedoch, vergeuden Sie nicht Ihre Zeit, es sei denn, Sie gehen, um sein schaffen höchst esoterische XML-Parser. Stattdessen suchen Sie für Parser, die nächste generation Parser (wie XmlTextReader) für Ihre jeweilige Plattform.
SAX Ressourcen
SAX wurde ursprünglich für Java, und finden Sie das original-open-source-Projekt, wurde für mehrere Jahre stabil, hier:
http://sax.sourceforge.net/
Es ist eine C# - Portierung des selben Projekt hier (mit HTML-docs als Teil der source-download); es ist auch stabil:
http://saxdotnet.sourceforge.net/
Wenn Sie nicht wie die C# - Implementierung, könnten Sie immer darauf zurückgreifen, um die Referenzierung von COM-DLLs, die über COMInterop mit MSXML3 oder später: http://msdn.microsoft.com/en-us/library/ms994343.aspx
Artikeln, die kommen aus der Java-Welt, aber was ist wohl die Konzepte zu veranschaulichen, die Sie benötigen, um erfolgreich zu sein, mit diesem Ansatz (es kann auch herunterladbare Java-Quellcode als nützlich erweisen könnte, und kann einfach genug, um zu konvertieren in C#):
Wird es eine umständliche Umsetzung. Ich habe nur SAX wieder in meinem pre-.NET Tage, aber es erfordert einige ziemlich advanced coding-Techniken. An diesem Punkt, es ist einfach nicht der Mühe Wert.
Interessantes Konzept für einen Hybrid-Parser
Dieser thread beschreibt einen hybrid-parser verwendet .NET XmlTextReader, einen parser zu implementieren, bietet eine Kombination von DOM-und SAX-Leistungen,...
http://bytes.com/groups/net-xml/178403-xmltextreader-versus-dom
InformationsquelleAutor EnocNRoll - Ananda Gopal
Ich glaube, es gibt keine Vorteile durch den Einsatz von SAX-mindestens aufgrund von zwei Gründen:
InformationsquelleAutor GregK
Persönlich, ich viel lieber das SAX-Modell, wie die XmlReader-hat einige wirklich lästig fallen, kann die Ursache von Fehlern im code, die verursachen könnten Sie Ihren code zu überspringen Elemente. Die meisten code strukturiert werden, um eine while(rdr.Read()) Modell, aber wenn Sie irgendwelche "ReadString" oder "ReadInnerXml()" innerhalb dieser Schleife finden Sie sich selbst-skipping Elemente für die nächste iteration.
Als SAX ist Ereignis-basiert, das wird nie hapen Sie können keine Operationen ausführen, dazu führen würde, dass dein parser zu suchen-vor.
Mein persönliches Gefühl ist, dass Microsoft erfunden haben die Vorstellung, dass der XmlReader ist besser mit der Erläuterung der push - /pull-Modell, aber ich weiß nicht wirklich es zu kaufen. Also Microsoft denken, dass Sie nicht brauchen zu erstellen eine state-machine mit XmlReader, das macht keinen Sinn für mich, aber trotzdem, es ist nur meine Meinung.
XmlReader
auf die harte Weise. Ist, dass der beste Weg, um sich eine Meinung bilden technische Fragen?John, ich nehme an, du hast Recht, und ich entschuldige mich. Obwohl ich finde, dass der XmlReader ein Fehler, der eine Menge von seltsamen bugs in der software, die vermieden werden könnten durch eine einfache SAX-basierte Ansatz.
Ich Stimme mit Brett. XmlTextReader ist Arkan und überlastet mit zu vielen Möglichkeiten zu tun, fast das gleiche. Das Modell fördert eine sehr lose definition der akzeptierten Xml-Struktur. Dies ist zwar nützlich für einige Anwendungen, in den meisten von mir, die ich ablehnen möchten-code, der erfüllt nicht meine angestrebte Struktur. Was ich wirklich will, ist ein RDP-xml-Bibliothek eine Im ziemlich überrascht, keiner hat geschrieben. Ohne, dass, obwohl, ich viel lieber SAX.
InformationsquelleAutor Brett Ryan