Je veux lire un gros fichier XML (100 + m). En raison de sa taille, je ne veux pas le charger en mémoire en utilisant XElement. J'utilise des requêtes LINQ-XML pour analyser et le lire. p>
Quelle est la meilleure façon de le faire? Tout exemple sur la combinaison de xpath ou xmlreader avec linq-xml / xelement? p>
aide s'il vous plaît. Merci. P>
3 Réponses :
Oui, vous pouvez combiner XMLreader avec le Méthode xnode.Readfrom , voir l'exemple de la documentation qui utilise C # pour traiter sélectivement les nœuds trouvés par le XMLreader comme xélément. P>
brillant. Je développe une application qui traitera plusieurs fichiers XML de 200 millions et XDocument me tue. Cela a fait une énorme amélioration. Merci.
Je pense qu'il y a un bug dans le code exemple de la page xnode.readfrom code> de la documentation. La déclaration
xelement el = xelement.readfrom (lecteur) en tant que xelement; code> devrait être
xelement el = nouveau xelement (lecteur.name, lecteur.value); code>. AS-EST, les premiers éléments de deux "enfants" sont ignorés dans le fichier XML à partir duquel il se lit.
Voir ma réponse pour le code qui fonctionne pour moi; Voir Cette réponse par Jon Skeet pour une explication des raisons pour lesquelles les deux méthodes de "lecture" ne devraient pas être mélangées. [La réponse de Jon ne mentionne pas la méthode xnode.readfrom code> explicitement, mais je suis convaincu que le même problème s'applique.]
Gardez simplement à l'esprit que vous devrez lire le fichier séquentiellement et faire référence à des frères et sœurs ou que des descendants sera lent au mieux et impossible au pire. Sinon @martinhonnn a la clé. P>
L'exemple de code dans la documentation MSDN pour le mais j'ai trouvé que le xnode.readfrom code> est comme suit:
streamrochilddoc < / Code> La méthode dans l'exemple doit être modifiée comme suit: p>
Oui. Le premier exemple ne fonctionne pas. Il va lire trop et sauter tous les autres "enfants"