00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "nxmlwriter.h"
00023
00028 NXmlWriter::NXmlWriter(NXmlDocument *doc)
00029 : m_doc(NULL)
00030 {
00031 if (!doc) {
00032 throw NXmlException("Invalid XML Document: NULL pointer",
00033 NException::XML, NXmlException::XML_INIT_ERROR);
00034 }
00035
00036 m_doc = doc;
00037 }
00038
00039 NXmlWriter::~NXmlWriter(void) {
00040
00041 }
00042
00043
00044 nint32 NXmlWriter::dump(NString *buffer, bool indent) {
00045 int size = 0;
00046 xmlTextWriterPtr writer;
00047 xmlChar *ret;
00048
00049 if (!buffer) {
00050 throw NXmlException("Invalid return buffer: NULL",
00051 NException::XML, NXmlException::XML_INIT_ERROR);
00052 }
00053 writer = xmlNewTextWriterTree(m_doc->getXmlDoc(),
00054 m_doc->getRootNode().getNode(), 0);
00055
00056
00057 while (xmlTextWriterEndElement(writer) != -1) {
00058
00059 }
00060 xmlTextWriterEndDocument(writer);
00061 xmlTextWriterFlush(writer);
00062
00063 if (indent) {
00064 xmlDocDumpFormatMemory(m_doc->getXmlDoc(), &ret, &size, 1);
00065 }
00066 else {
00067 xmlDocDumpFormatMemory(m_doc->getXmlDoc(), &ret, &size, 0);
00068 }
00069
00070 buffer->set(reinterpret_cast<const char *>(ret));
00071
00072 return size;
00073 }
00074