SAX vs XmlTextReader - SAX en C#
Je tente de lire un grand document XML et je voulais le faire dans des segments vs XmlDocument
'façon de lire tout le fichier en mémoire. Je sais que je peux utiliser XmlTextReader
pour ce faire, mais je me demandais si quelqu'un a utilisé SAX .NET? Je sais que les développeurs Java ne jurent que par elle et je me demandais si il vaut la peine de lui donner un essai et si oui, quels sont les avantages de l'utilisation de cela. Je suis à la recherche pour plus de détails.
XmlTextReader
a été supprimée pour une utilisation directe. Il ne doit être utilisé dans la création de votre propre XmlReader
classe en dérivant de XmlTextReader
. XmlReader.Create
devrait être utilisé à la place.Vous n'avez pas de n'importe quelle source à la preuve, s'il vous plaît?
Voir la rubrique "commentaires" dans le classe XmlTextReader: "Note le .NET Framework version 2.0, il est recommandé de créer XmlReader instances à l'aide de la XmlReader.Méthode de création. Cela vous permet de tirer pleinement parti des nouvelles fonctionnalités introduites dans cette version. Pour plus d'informations, voir la Création de XML Lecteurs."
OriginalL'auteur cgreeno | 2008-09-24
Vous devez vous connecter pour publier un commentaire.
Si vous parlez SAX pour .NET, le projet ne semble pas être maintenu. La dernière version a été de plus de 2 ans. Peut-être qu'ils ont obtenu, il est parfait sur la dernière version, mais je n'aurais pas parier sur elle. L'auteur, Karl Waclawek, semble avoir disparu sur le net.
Comme pour SAX sous Java? Vous misez, c'est génial. Malheureusement, SAX n'a jamais été développé comme un standard, de sorte que tous les non-Java ports ont été l'adaptation d'une API Java pour leurs propres besoins. Alors que DOM est un assez minable de l'API, il a l'avantage d'avoir été conçu pour de multiples langues et environnements, il est donc facile à mettre en œuvre en Java, C#, JavaScript, C, et al.
Oh, il pourrait être intéressant de noter que le SAX de mise en œuvre de Java est à la table et a été non modifié pour encore plus de SAX .NET. La seule fois que des améliorations seront nécessaires soit à la base de code est, fondamentalement, si la norme XML évolue encore plus.
OriginalL'auteur Craig Trader
Si vous voulez juste faire le travail rapidement, le XmlTextReader existe à cet effet (dans .NET).
Si vous voulez en savoir un standard de facto (et disponibles dans d'autres langages de programmation) qui est stable et qui va vous forcer à code très efficacement et élégamment, mais qui est aussi d'une grande souplesse, puis regardez en SAX. Cependant, ne perdez pas votre temps, sauf si vous avez l'intention de créer hautement ésotérique parseurs XML. Au lieu de cela, chercher des analyseurs de la prochaine génération d'analyseurs (comme XmlTextReader) pour votre plate-forme.
SAX Ressources
SAX a été écrit à l'origine pour Java, et vous pouvez trouver l'origine du projet open source, qui a été stable pendant plusieurs années, ici:
http://sax.sourceforge.net/
Il y a un C# port du même projet (avec HTML docs comme une partie de la source de téléchargement); il est également stable:
http://saxdotnet.sourceforge.net/
Si vous n'aimez pas le C# de mise en œuvre, vous pouvez toujours recourir à l'référencement COM Dll via COMInterop à l'aide de MSXML3 ou plus tard: http://msdn.microsoft.com/en-us/library/ms994343.aspx
Articles qui viennent du monde Java, mais qui probablement illustrer les concepts que vous avez besoin pour réussir avec cette approche (il peut également être téléchargé le code source Java qui peut s'avérer utile et peut être assez facile à convertir en C#):
Il sera lourd de mise en œuvre. J'ai seulement utilisé SAX de retour dans mon pre-.NET jours, mais il nécessite quelques jolies avancées techniques de codage. À ce point, c'est juste pas la peine.
Concept intéressant pour un Hybride Analyseur
Ce fil décrit un analyseur hybride qui utilise le .NET XmlTextReader de mettre en œuvre un analyseur qui fournit une combinaison de DOM et SAX avantages...
http://bytes.com/groups/net-xml/178403-xmltextreader-versus-dom
OriginalL'auteur EnocNRoll - Ananda Gopal
Je crois que il n'y a pas d'avantages à l'aide de SAX au moins à cause de deux raisons:
OriginalL'auteur GregK
Personnellement, je préfère de beaucoup le SAX que le modèle de XmlReader a quelques très ennuyeux pièges qui peuvent causer des bugs dans votre code qui pourrait causer à votre code d'ignorer les éléments. La plupart du code est structuré autour d'un certain temps(rdr.Read()) modèle, mais si vous avez des "ReadString" ou "ReadInnerXml()" à l'intérieur de cette boucle, vous trouverez vous-même de sauter des éléments sur la prochaine itération.
Comme SAX est basée sur les événements, cela n'aura jamais hapen que vous ne pouvez pas effectuer toute opération qui serait la cause de votre analyseur de chercher à l'avance.
Mon sentiment personnel est que Microsoft ont inventé la notion que le XmlReader est mieux avec l'explication de la push/pull modèle, mais je n'ai pas vraiment de l'acheter. De sorte que Microsoft pense que vous n'avez pas besoin de créer un état-machine avec XmlReader, qui n'a pas de sens pour moi, mais de toute façon, c'est juste mon avis.
XmlReader
à la dure. C'est que la meilleure façon de se former une opinion sur des questions techniques?John, je suppose que vous avez raison, et je prie de m'excuser. Mais je n'ai trouver que la XmlReader à une faute de beaucoup de bugs étranges dans le logiciel qui peut être évitée par un simple SAX.
Je suis d'accord avec Brett. XmlTextReader est des arcanes et surchargé avec trop de façons de faire presque la même chose. En outre, son modèle encourage une très large définition de votre structure Xml. Bien que ce soit pratique pour certaines applications, en plus de la mienne, je veux rejeter code qui ne répond pas à ma destinée de la structure. Ce que je veux vraiment, c'est un RDP bibliothèque xml un Im plutôt surpris, aucun n'a écrit un. Sans que, bien que, je préfère de beaucoup de SAX.
OriginalL'auteur Brett Ryan