+ return XmlDocPtrWrapper(new XmlDocWrapper { ret });
+}
+
+void XML_Template_process(XmlDocPtrWrapper doc, Directive *root_directive, bool clean)
+{
+ root_directive->process(xmlDocGetRootElement(doc->ptr), clean);
+ delete root_directive;
+}
+
+namespace {
+
+int write_to_string(void *context, const char *buffer, int len)
+{
+ std::string *str = reinterpret_cast<std::string *>(context);
+ str->append(buffer, len);
+ return len;
+}
+
+int close_string(void *context)
+{
+ return 0;