J'ai du code qui crée un DOM xml assez volumineux et l'écrit dans un fichier (jusqu'à 50-100 Mo). Il crée essentiellement le DOM puis appelle un toString dessus et l'écrit avec ofstream. Existe-t-il un moyen d'obtenir une sortie en streaming de la dom générée afin qu'elle ne crée pas toute la structure en mémoire en une seule fois, puis la copie, etc? Je ne modifierai aucun noeud après l'avoir créé afin qu'il puisse l'écrire et libérer de la mémoire immédiatement. Je pourrais écrire ma propre classe de xml qui fait la construction de xml mais ... je ne pense pas que c'est une bonne idée puisque je manquerai probablement quelque chose quand il s'agit d'échapper etccréer et diffuser un document XML volumineux en C++
Répondre
Ok, se révèle libxml2 a une API de streaming:
http://xmlsoft.org/examples/testWriter.c
Il est un peu ancien style (très C-ish) mais vous pouvez écrire votre wrapper autour d'elle.
Je recommanderais GenX comme un écrivain en streaming XML, je l'utilise dans Programmer's Notepad et cela fonctionne un régal, vous pouvez voir des exemples d'utilisation dans le code source. Extrêmement rapide, il produit du bon XML UTF-8. L'utilisation de la mémoire pendant que vous l'utilisez devrait rester à peu près constante.
Regardez sous le mot-clé "C++ XML writer;" Les auteurs XML génèrent du XML vers un fichier sans créer le DOM entier en mémoire, ils n'ont donc pas besoin d'utiliser beaucoup de mémoire. Vous n'avez pas mentionné la plate-forme, mais Microsoft XmlLite a IXmlWriter.
Il n'y a vraiment pas grand chose à générer du XML valide; l'évasion dont vous vous inquiétez est insignifiante.
Voici une bibliothèque pour l'écriture en continu de XML ici: https://code.google.com/p/xml-writer-cpp/ - si rien d'autre, c'est utile à des fins éducatives.
- 1. Créer un élément dans un document xml
- 2. Ajouter un document XML à un nœud XML en C#?
- 3. Comment résoudre toutes les références d'entité en XML et créer un nouveau XML en C#?
- 4. Analyser le document XML en C#
- 5. comment créer un document XML à la volée avec xquery?
- 6. Générer un hachage de document XML en C#
- 7. Créer document XML en utilisant C# avec SQL Server en tant que source de données
- 8. Importer un document XML
- 9. Lier un document XML à WPF TreeView
- 10. Diffuser/Fusionner des documents Xml par programmation
- 11. Comment diviser un document XML en tiers (ou, mieux, en n morceaux)?
- 12. Partage XML d'un fichier volumineux
- 13. Générer un document word en C#
- 14. créer un nouveau document vide avec javascript
- 15. créer un document javascript Objet
- 16. Convertir un nœud DOM ou Document en XML en JavaScript
- 17. Création d'un nœud parent pour le document XML en C#
- 18. Récupération d'un document XML et analyse d'un en-tête HTTP en même temps (C#)
- 19. Convertir un document Word en XML et revenir en arrière ASP.Net
- 20. Puis-je diffuser sur Internet un document d'un lieu et son type de contenu d'un autre?
- 21. Créer XML en utilisant Linq to XML et les tableaux
- 22. Exporter vers un document Word en C#
- 23. Comment créer un modèle XML en Perl?
- 24. Comment créer et utiliser un objet de document XML en tenant compte de la compatibilité du navigateur?
- 25. Considérations d'architecture et de mise en cache avec des fichiers XML volumineux
- 26. Analyseur utilisant RegEx et XML, en C#
- 27. Copiez un document XML à l'autre en utilisant DOM
- 28. VB.NET insertion de nœuds xml dans un document XML existant
- 29. Créer un document PDF en utilisant simplement VB.NET?
- 30. Comment puis-je créer un document Word en utilisant Python?