+/*
+ * Copied from pugixml samples
+ */
+struct xml_string_writer : pugi::xml_writer {
+ std::string result;
+
+ virtual void write(const void *data, size_t size) {
+ result.append(static_cast<const char *>(data), size);
+ }
+};
+// end::code[]
+
+struct xml_memory_writer : pugi::xml_writer {
+ char *buffer;
+ size_t capacity;
+ size_t result;
+
+ xml_memory_writer() : buffer(0), capacity(0), result(0) {
+ }
+
+ xml_memory_writer(char *buffer, size_t capacity) : buffer(buffer), capacity(capacity), result(0) {
+ }
+
+ size_t written_size() const {
+ return result < capacity ? result : capacity;
+ }
+
+ virtual void write(const void *data, size_t size) {
+ if (result < capacity) {
+ size_t chunk = (capacity - result < size) ? capacity - result : size;
+
+ memcpy(buffer + result, data, chunk);
+ }
+ result += size;
+ }
+};
+
+std::string node_to_string(pugi::xml_node node) {
+ xml_string_writer writer;
+ node.print(writer);
+
+ return writer.result;
+}
+
+
+void buildXmlData(const string &messageName, const string &ieName, vector<string> &repValues, unsigned char *buffer) {