39 #include "get_xml_data.h"
47 #include "XDFloat32.h"
48 #include "XDFloat64.h"
52 #include "XDStructure.h"
53 #include "XDSequence.h"
56 const char *DAP_SCHEMA =
"http://xml.opendap.org/ns/dap/3.3#";
69 void get_data_values_as_xml(DDS *dds, XMLWriter *writer)
74 if (xmlTextWriterStartElementNS(writer->get_writer(), NULL, (
const xmlChar*)
"Dataset", (
const xmlChar*)DAP_SCHEMA) < 0)
75 throw InternalErr(__FILE__, __LINE__,
"Error starting the Dataset element for response ");
77 DDS::Vars_iter i = dds->var_begin();
78 while (i != dds->var_end()) {
80 BESDEBUG(
"xd",
"Printing the values for " << (*i)->name() <<
" (" << (*i)->type_name() <<
")" << endl);
81 dynamic_cast<XDOutput &
>(**i).print_xml_data(writer,
true);
86 if (xmlTextWriterEndElement(writer->get_writer()) < 0)
87 throw InternalErr(__FILE__, __LINE__,
"Error ending Dataset element.");
90 catch (InternalErr &e) {
91 xmlErrorPtr error = xmlGetLastError();
92 if (error && error->message)
93 throw InternalErr(e.get_error_message() +
"; libxml: " + error->message);
95 throw InternalErr(e.get_error_message() +
"; libxml: no message");
99 DDS *dds_to_xd_dds(DDS * dds)
101 BESDEBUG(
"xd",
"In datadds_to_xd_datadds" << endl);
106 DDS *xd_dds =
new DDS(dds->get_factory(), dds->get_dataset_name());
108 DDS::Vars_iter i = dds->var_begin();
109 while (i != dds->var_end()) {
110 BaseType *abt = basetype_to_xd(*i);
111 xd_dds->add_var(abt);
120 xd_dds->tag_nested_sequences();
126 basetype_to_xd(BaseType *bt)
129 throw InternalErr(__FILE__, __LINE__,
"Null BaseType to XD factory");
131 switch (bt->type()) {
133 return new XDByte(
dynamic_cast<Byte *
>(bt));
136 return new XDInt16(
dynamic_cast<Int16 *
>(bt));
139 return new XDUInt16(
dynamic_cast<UInt16 *
>(bt));
142 return new XDInt32(
dynamic_cast<Int32 *
>(bt));
145 return new XDUInt32(
dynamic_cast<UInt32 *
>(bt));
148 return new XDFloat32(
dynamic_cast<Float32 *
>(bt));
151 return new XDFloat64(
dynamic_cast<Float64 *
>(bt));
154 return new XDStr(
dynamic_cast<Str *
>(bt));
157 return new XDUrl(
dynamic_cast<Url *
>(bt));
160 return new XDArray(
dynamic_cast<Array *
>(bt));
162 case dods_structure_c:
163 return new XDStructure(
dynamic_cast<Structure *
>(bt));
165 case dods_sequence_c:
166 return new XDSequence(
dynamic_cast<Sequence *
>(bt));
169 return new XDGrid(
dynamic_cast<Grid *
>(bt));
172 throw InternalErr(__FILE__, __LINE__,
"Unknown type");