Archived CMarkup 11.0 Release Notes
Release 11.0 Date: March 24, 2009, download
A developer at NASA Jet Propulsion Laboratory contacted me years ago evaluating the use of XML to store metadata for 6 to 12 GB of raw telemetry data collected each observation night. The metadata file would not be as large as the raw data file, but it needed to be one file that would grow through the night. He did't want to re-save the whole file with each update, he needed to append (to write and flush) only the additional records to get them to disk as quickly as possible to minimize data loss in the case of a computer crash.
The new "file mode" in CMarkup essentially lets you use your familiar CMarkup methods directly on files, rather than having the entire document in memory. This opens the way for more efficient large XML file-based solutions, and even really huge XML files. To learn more about file mode in CMarkup see the C++ XML writer and C++ XML reader.
Here's the list of 11.0 enhancements:
- New GetResult method returns detailed result markup which should be used instead of GetError for structured result information. All result and error reporting has been overhauled in this release, and the "empty document" message has been removed
- Debugging information improved to show current node and current parent in a single
m_pCurrentpointer. See Debugging with CMarkup
- Updated charset names, aliases and code pages in CMarkup and added support for GB18030 code page 54936
- Refactored CMarkup to remove all nested structs and greatly simplify the header file while better encapsulating struct functionality in the cpp file, making the code cleaner, more readable, easier to export from a library, and compatible with more compilers
- New C++ XML writer and C++ XML reader handle huge/large XML file-based requirements. The new methods are Open, Close, and Flush
- New HasAttrib method to compliment GetAttrib in distinuishing between an empty attribute value and not having the attribute at all. Previously, you needed to iterate with GetAttribName to determine this. New also is the corresponding HasChildAttrib method