Ich habe etwas Code, der ein ziemlich großes XML-DOM erstellt und schreibt es in eine Datei (bis zu 50-100 MB). Es erstellt im Grunde das DOM und ruft dann einen toString auf und schreibt es mit ofstream aus. Gibt es eine Möglichkeit, eine Streaming-Ausgabe des erzeugten Doms zu erhalten, so dass es nicht die gesamte Struktur im Speicher auf einmal erzeugt und dann kopiert, usw.? Ich werde keinen Knoten ändern, nachdem ich ihn erstellt habe, damit er es schreiben kann und den Speicher sofort freigibt. Ich könnte meine eigene XML-Klasse schreiben, die die XML-Konstruktion tut, aber ... ich denke nicht, dass das eine gute Idee ist, da ich wahrscheinlich etwas vermissen werde, wenn es darum geht, zu entkommen etc.erstellen und streamen große XML-Dokument in C++
Antwort
Ok, stellt sich heraus, libxml2 eine Streaming-API hat:
http://xmlsoft.org/examples/testWriter.c
Es ist ein wenig im alten Stil (sehr C-Ish), aber Sie können Ihre Wrapper um es zu schreiben.
Ich würde GenX empfehlen Streaming-XML-Writer, verwende ich dies in Programmer's Notepad und es funktioniert ein Vergnügen, können Sie Beispiele für die Verwendung im Quellcode sehen. Extrem schnell und erzeugt gutes UTF-8 XML. Die Speicherbelegung während der Verwendung sollte ungefähr konstant bleiben.
Schauen Sie unter Stichwort "C++ XML Writer;" XML-Writer generieren XML-Dateien, ohne das gesamte DOM im Speicher zu erstellen, sodass sie nicht viel Speicher benötigen. Sie haben Plattform nicht erwähnt, aber Microsoft XmlLite hat IXmlWriter.
Es gibt wirklich nicht viel zu generieren gültiges XML; Die Flucht, um die Sie sich sorgen, ist trivial.
Es gibt eine Bibliothek zum Streamen von XML hier schreiben: https://code.google.com/p/xml-writer-cpp/ - wenn nichts anderes, es ist nützlich für Bildungszwecke.
- 1. fügen Sie ein Stammelement mit Xmldokument in C# .net
- 2. Wie streamen große Dateien mit JAXB Marshaller?
- 3. Streamen und entpacken Sie große CSV-Datei mit Ruby
- 4. Dynamisch erstellen und streamen ZIP zu Client
- 5. Google Drive PHP API - So streamen Sie eine große Datei
- 6. Wie zum Streamen in und eine große Datendatei in Python manipuliert
- 7. Erstellen einer GZipped-TAR-Datei und dynamisches Streamen über PHP?
- 8. Große Zahl in C#. NET
- 9. C# Suche große Textdatei
- 10. große Dateien in C# Lesen
- 11. C++ Qt WordCount und große Datensätze
- 12. Wirklich große Zahlen und Objective-C
- 13. Große ganze Zahlen in C#
- 14. Streamen URL in Kodi
- 15. Refactoring große C++ Klasse
- 16. Kann nicht große Arrays erstellen
- 17. Erstellen Sie benutzerdefinierte große Benachrichtigungen
- 18. Generiere große Zahlen mit srand() in c
- 19. Große Hintergrundbilder und Bildschirmgrößen
- 20. Erstellen große Anzahl von Array in Scala
- 21. C: Drucken große Zahlen
- 22. C++ Große Eigenkompositionsgeschwindigkeit
- 23. Sucht und große Dateien in einem Linux-C Lesen ++ Anwendung
- 24. Gridview in C# zeigen Daten und eine große eror nicht
- 25. Split eine große Datei in C++
- 26. Groovy Grails, Wie streamen oder puffern Sie eine große Datei in der Antwort eines Controllers?
- 27. Kann Jpegs nicht Bilder über HTTP in C# streamen
- 28. Gleiches Layout für große und große Geräte
- 29. Node.js - Wie in Zeichenfolge streamen
- 30. swfbridge und große Dateien