28#include "BESXMLWriter.h"
30#include <libxml/encoding.h>
31#include <libxml/xmlwriter.h>
33#include <BESInternalFatalError.h>
35static const char *ENCODING =
"ISO-8859-1";
37static const char *HAI_NS =
"https://xml.opendap.org/ns/bes/admin/1.0#";
38constexpr int XML_BUF_SIZE = 2000000;
40BESXMLWriter::BESXMLWriter()
47 if (!(d_doc_buf = xmlBufferCreateSize(XML_BUF_SIZE)))
50 xmlBufferSetAllocationScheme(d_doc_buf, XML_BUFFER_ALLOC_DOUBLEIT);
54 if (!(d_writer = xmlNewTextWriterMemory(d_doc_buf, 0)))
57 if (xmlTextWriterSetIndent(d_writer, 4) < 0)
60 if (xmlTextWriterSetIndentString(d_writer, (
const xmlChar*)
" ") < 0)
69 if (xmlTextWriterStartDocument(d_writer, NULL, ENCODING, NULL) < 0)
74 if (xmlTextWriterStartElementNS(d_writer, (
const xmlChar*)
"hai", (
const xmlChar*)
"BesAdminCmd", (
const xmlChar*) HAI_NS) < 0)
83BESXMLWriter::~BESXMLWriter()
88void BESXMLWriter::m_cleanup()
92 xmlFreeTextWriter(d_writer);
96 xmlBufferFree(d_doc_buf);
104const char *BESXMLWriter::get_doc()
106 if (d_writer && d_started) {
108 if (xmlTextWriterEndElement(d_writer) < 0)
111 if (xmlTextWriterEndDocument(d_writer) < 0)
118 xmlFreeTextWriter(d_writer);
123 if (!d_doc_buf->content)
126 return (
const char *) d_doc_buf->content;
exception thrown if an internal error is found and is fatal to the BES