Si je fais
XPathDocument doc = new XPathDocument("filename.xml");
5 Réponses :
Une solution consiste à scinder un grand document XML en plusieurs plus petits. P>
ou, sinon, vous pouvez écrire votre propre xmlreader code> ignorera les sous-arbres non désirés. Vous pouvez transmettre ce
xmlreader code> comme argument sur le
xpathDocument () code> constructeur - besoin de le camoufler comme
textreader code>. P>.
Existe-t-il un meilleur moyen de charger certaines parties d'un document XML? Comme juste certaines tags?
@wires: Pas une solution système, mais vous pouvez écrire votre propre xmlreader qui ignorera les sous-arbres non désirés. Vous pouvez transmettre ce xmlreader comme argument sur le constructeur XPathDocument () - besoin de le camoufler comme textreader. :)
https://msdn.microsoft.com /en-us/library/system.xml.xpath.xpathdocument.aspx P>
"fournit une représentation rapide, en lecture seule, en mémoire d'un document XML à l'aide du modèle de données XPATH." P>
Vous voudrez peut-être essayer l'autre constructeur XPathDocument (flux) a >. Streaming Le document n'utilisera pas autant de mémoire. P>
Peut-être que vous ne chercherez pas à regarder LINQ à XML A>, comme il est plus facile, plus rapide de coder et de faire plus de beaux code que d'utiliser la analyse de SAX / DOM. Voir ce message: Comment stocker des données sans utiliser de base de données et comment les récupérer? p>
L'utilisation du constructeur de flux n'a aucun effet sur la quantité de mémoire que le XPathDocument utilisera. Et Linq to XML n'est pas plus rapide que sax (ou à l'aide d'un xmlreader, ce qui est utilisé dans .NET à la place de saxo), ni - contrairement à l'utilisation d'un xmlreader - évite-t-elle de lire tout le document en mémoire.
En ce qui concerne le constructeur de flux, c'est pourquoi j'ai écrit "tu pourrais vouloir". D'autre part, je pense que vous devriez jeter un oeil sur la manière dont LINQ diffuse les données et ne charge pas de fichier complet à la mémoire.
La classe XstreamingElement peut écrire un très grand document XML sans créer un document XML en pleine mémoire. Mais ce n'est pas utilisé pour la lecture. Lorsque la plupart des gens parlent de Linq à XML (comme dans les deux exemples que vous avez liés à), ils parlent de xdocument et xdocument charge en fait le document XML en pleine mémoire. Y a-t-il un impressionnant objet Linq que je néglige? Croyez-moi, c'est quelque chose que j'aimerais me tromper.
Intéressant, un runtime C # pour un téléphone portable.