int lpc2xml_convert_string(lpc2xml_context* context, char **content) { int ret = -1; xmlBufferPtr buffer = xmlBufferCreate(); xmlSaveCtxtPtr save_ctx; lpc2xml_context_clear_logs(context); xmlSetGenericErrorFunc(context, lpc2xml_genericxml_error); save_ctx = xmlSaveToBuffer(buffer, "UTF-8", XML_SAVE_FORMAT); if(save_ctx != NULL) { ret = internal_convert_lpc2xml(context); if(ret == 0) { ret = xmlSaveDoc(save_ctx, context->doc); if(ret != 0) { lpc2xml_log(context, LPC2XML_ERROR, "Can't save document"); lpc2xml_log(context, LPC2XML_ERROR, "%s", context->errorBuffer); } } xmlSaveClose(save_ctx); } else { lpc2xml_log(context, LPC2XML_ERROR, "Can't initialize internal buffer"); lpc2xml_log(context, LPC2XML_ERROR, "%s", context->errorBuffer); } if(ret == 0) { #if LIBXML_VERSION >= 20800 *content = (char *)xmlBufferDetach(buffer); #else *content = strdup((const char *)xmlBufferContent(buffer)); #endif } xmlBufferFree(buffer); return ret; }
bool XMLWrapper::convertFromString(const char *text, xmlChar *&xmlText) { bool result = false; xmlBufferPtr in = xmlBufferCreateStatic((void*) text, strlen(text)); xmlBufferPtr out = xmlBufferCreate(); int ret = xmlCharEncInFunc(mCharEncodingHandler, out, in); if (ret >= 0) { result = true; xmlText = xmlBufferDetach(out); } xmlBufferFree(in); xmlBufferFree(out); return result; }
bool XMLWrapper::convertFromString(const char *text, xmlChar *&xmlText) { bool result = false; xmlBufferPtr in = xmlBufferCreateStatic((void*) text, strlen(text)); xmlBufferPtr out = xmlBufferCreate(); int ret = xmlCharEncInFunc(mCharEncodingHandler, out, in); if (ret >= 0) { result = true; #if LIBXML_VERSION >= 20800 xmlText = xmlBufferDetach(out); #else xmlText = xmlStrdup(xmlBufferContent(out)); #endif } xmlBufferFree(in); xmlBufferFree(out); return result; }
const std::string XMLDocument::dumpHTML(bool indent) const { xmlBuffer * buffer = xmlBufferCreate(); int ret; int options = XML_SAVE_AS_HTML; if (indent) { options |= XML_SAVE_FORMAT; } xmlThrDefIndentTreeOutput(1); xmlSaveCtxtPtr ctxt = xmlSaveToBuffer(buffer, 0, options); ret = xmlSaveDoc(ctxt, document); xmlSaveFlush(ctxt); xmlSaveClose(ctxt); std::string str((const char *)xmlBufferDetach(buffer)); xmlBufferFree(buffer); return str; }
/* * Construct a xcal string for an iCalendar component. */ char *icalcomponent_as_xcal_string(icalcomponent *ical) { xmlDocPtr doc; xmlNodePtr root, xcomp; xmlChar *buf; int bufsiz; if (!ical) return NULL; doc = xmlNewDoc(BAD_CAST "1.0"); root = xmlNewNode(NULL, BAD_CAST "icalendar"); xmlNewNs(root, BAD_CAST XML_NS_ICALENDAR, NULL); xmlDocSetRootElement(doc, root); xcomp = icalcomponent_as_xml_element(ical); xmlAddChild(root, xcomp); if (!xmlStrcmp(xcomp->name, BAD_CAST "vcalendar")) { /* Complete iCalendar stream */ xmlDocDumpFormatMemoryEnc(doc, &buf, &bufsiz, "utf-8", config_httpprettytelemetry); } else { /* Single iCalendar object */ xmlBufferPtr xbuf = xmlBufferCreate(); bufsiz = xmlNodeDump(xbuf, doc, xcomp, 0, config_httpprettytelemetry); buf = xmlBufferDetach(xbuf); xmlBufferFree(xbuf); } xmlFreeDoc(doc); return (char *) buf; }