📄 xmlwriter.c.svn-base
字号:
buf = xmlStrdup(BAD_CAST "xmlns"); if (prefix != NULL) { buf = xmlStrcat(buf, BAD_CAST ":"); buf = xmlStrcat(buf, prefix); } count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI); xmlFree(buf); if (count < 0) return -1; sum += count; } return sum;}/** * xmlTextWriterWriteFormatElement: * @writer: the xmlTextWriterPtr * @name: element name * @format: format string (see printf) * @...: extra parameters for the format * * Write a formatted xml element. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteFormatElement(xmlTextWriterPtr writer, const xmlChar * name, const char *format, ...){ int rc; va_list ap; va_start(ap, format); rc = xmlTextWriterWriteVFormatElement(writer, name, format, ap); va_end(ap); return rc;}/** * xmlTextWriterWriteVFormatElement: * @writer: the xmlTextWriterPtr * @name: element name * @format: format string (see printf) * @argptr: pointer to the first member of the variable argument list. * * Write a formatted xml element. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer, const xmlChar * name, const char *format, va_list argptr){ int rc; xmlChar *buf; if (writer == NULL) return -1; buf = xmlTextWriterVSprintf(format, argptr); if (buf == 0) return 0; rc = xmlTextWriterWriteElement(writer, name, buf); xmlFree(buf); return rc;}/** * xmlTextWriterWriteElement: * @writer: the xmlTextWriterPtr * @name: element name * @content: element content * * Write an xml element. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name, const xmlChar * content){ int count; int sum; sum = 0; count = xmlTextWriterStartElement(writer, name); if (count == -1) return -1; sum += count; count = xmlTextWriterWriteString(writer, content); if (count == -1) return -1; sum += count; count = xmlTextWriterEndElement(writer); if (count == -1) return -1; sum += count; return sum;}/** * xmlTextWriterWriteFormatElementNS: * @writer: the xmlTextWriterPtr * @prefix: namespace prefix * @name: element local name * @namespaceURI: namespace URI * @format: format string (see printf) * @...: extra parameters for the format * * Write a formatted xml element with namespace support. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer, const xmlChar * prefix, const xmlChar * name, const xmlChar * namespaceURI, const char *format, ...){ int rc; va_list ap; va_start(ap, format); rc = xmlTextWriterWriteVFormatElementNS(writer, prefix, name, namespaceURI, format, ap); va_end(ap); return rc;}/** * xmlTextWriterWriteVFormatElementNS: * @writer: the xmlTextWriterPtr * @prefix: namespace prefix * @name: element local name * @namespaceURI: namespace URI * @format: format string (see printf) * @argptr: pointer to the first member of the variable argument list. * * Write a formatted xml element with namespace support. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer, const xmlChar * prefix, const xmlChar * name, const xmlChar * namespaceURI, const char *format, va_list argptr){ int rc; xmlChar *buf; if (writer == NULL) return -1; buf = xmlTextWriterVSprintf(format, argptr); if (buf == 0) return 0; rc = xmlTextWriterWriteElementNS(writer, prefix, name, namespaceURI, buf); xmlFree(buf); return rc;}/** * xmlTextWriterWriteElementNS: * @writer: the xmlTextWriterPtr * @prefix: namespace prefix * @name: element local name * @namespaceURI: namespace URI * @content: element content * * Write an xml element with namespace support. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteElementNS(xmlTextWriterPtr writer, const xmlChar * prefix, const xmlChar * name, const xmlChar * namespaceURI, const xmlChar * content){ int count; int sum; if ((writer == NULL) || (name == NULL) || (*name == '\0')) return -1; sum = 0; count = xmlTextWriterStartElementNS(writer, prefix, name, namespaceURI); if (count < 0) return -1; sum += count; count = xmlTextWriterWriteString(writer, content); if (count == -1) return -1; sum += count; count = xmlTextWriterEndElement(writer); if (count == -1) return -1; sum += count; return sum;}/** * xmlTextWriterStartPI: * @writer: the xmlTextWriterPtr * @target: PI target * * Start an xml PI. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterStartPI(xmlTextWriterPtr writer, const xmlChar * target){ int count; int sum; xmlLinkPtr lk; xmlTextWriterStackEntry *p; if ((writer == NULL) || (target == NULL) || (*target == '\0')) return -1; if (xmlStrcasecmp(target, (const xmlChar *) "xml") == 0) { xmlGenericError(xmlGenericErrorContext, "xmlTextWriterStartPI : target name [Xx][Mm][Ll] is reserved for xml standardization!\n"); return -1; } sum = 0; lk = xmlListFront(writer->nodes); if (lk != 0) { p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); if (p != 0) { switch (p->state) { case XML_TEXTWRITER_ATTRIBUTE: count = xmlTextWriterEndAttribute(writer); if (count < 0) return -1; sum += count; /* fallthrough */ case XML_TEXTWRITER_NAME: count = xmlOutputBufferWriteString(writer->out, ">"); if (count < 0) return -1; sum += count; p->state = XML_TEXTWRITER_TEXT; break; case XML_TEXTWRITER_NONE: case XML_TEXTWRITER_TEXT: case XML_TEXTWRITER_DTD: break; case XML_TEXTWRITER_PI: case XML_TEXTWRITER_PI_TEXT: xmlGenericError(xmlGenericErrorContext, "xmlTextWriterStartPI : nested PI!\n"); return -1; default: return -1; } } } p = (xmlTextWriterStackEntry *) xmlMalloc(sizeof(xmlTextWriterStackEntry)); if (p == 0) { xmlGenericError(xmlGenericErrorContext, "xmlTextWriterStartPI : out of memory!\n"); return -1; } p->name = xmlStrdup(target); if (p->name == 0) { xmlGenericError(xmlGenericErrorContext, "xmlTextWriterStartPI : out of memory!\n"); xmlFree(p); return -1; } p->state = XML_TEXTWRITER_PI; xmlListPushFront(writer->nodes, p); count = xmlOutputBufferWriteString(writer->out, "<?"); if (count < 0) return -1; sum += count; count = xmlOutputBufferWriteString(writer->out, (const char *) p->name); if (count < 0) return -1; sum += count; return sum;}/** * xmlTextWriterEndPI: * @writer: the xmlTextWriterPtr * * End the current xml PI. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterEndPI(xmlTextWriterPtr writer){ int count; int sum; xmlLinkPtr lk; xmlTextWriterStackEntry *p; if (writer == NULL) return -1; lk = xmlListFront(writer->nodes); if (lk == 0) return 0; p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); if (p == 0) return 0; sum = 0; switch (p->state) { case XML_TEXTWRITER_PI: case XML_TEXTWRITER_PI_TEXT: count = xmlOutputBufferWriteString(writer->out, "?>"); if (count < 0) return -1; sum += count; break; default: return -1; } xmlListPopFront(writer->nodes); return sum;}/** * xmlTextWriterWriteFormatPI: * @writer: the xmlTextWriterPtr * @target: PI target * @format: format string (see printf) * @...: extra parameters for the format * * Write a formatted PI. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target, const char *format, ...){ int rc; va_list ap; va_start(ap, format); rc = xmlTextWriterWriteVFormatPI(writer, target, format, ap); va_end(ap); return rc;}/** * xmlTextWriterWriteVFormatPI: * @writer: the xmlTextWriterPtr * @target: PI target * @format: format string (see printf) * @argptr: pointer to the first member of the variable argument list. * * Write a formatted xml PI. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer, const xmlChar * target, const char *format, va_list argptr){ int rc; xmlChar *buf; if (writer == NULL) return -1; buf = xmlTextWriterVSprintf(format, argptr); if (buf == 0) return 0; rc = xmlTextWriterWritePI(writer, target, buf); xmlFree(buf); return rc;}/** * xmlTextWriterWritePI: * @writer: the xmlTextWriterPtr * @target: PI target * @content: PI content * * Write an xml PI. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWritePI(xmlTextWriterPtr writer, const xmlChar * target, const xmlChar * content){ int count; int sum; sum = 0; count = xmlTextWriterStartPI(writer, target); if (count == -1) return -1; sum += count; if (content != 0) { count = xmlTextWriterWriteString(writer, content); if (count == -1) return -1; sum += count; } count = xmlTextWriterEndPI(writer); if (count == -1) return -1; sum += count; return sum;}/** * xmlTextWriterStartCDATA: * @writer: the xmlTextWriterPtr * * Start an xml CDATA section. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterStartCDATA(xmlTextWriterPtr writer){ int count; int sum; xmlLinkPtr lk; xmlTextWriterStackEntry *p; if (writer == NULL) return -1; sum = 0; lk = xmlListFront(writer->nodes); if (lk != 0) { p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); if (p != 0) { switch (p->state) { case XML_TEXTWRITER_NONE: case XML_TEXTWRITER_PI: case XML_TEXTWRITER_PI_TEXT: break; case XML_TEXTWRITER_ATTRIBUTE: count = xmlTextWriterEndAttribute(writer); if (count < 0) return -1; sum += count; /* fallthrough */ case XML_TEXTWRITER_NAME: count = xmlOutputBufferWriteString(writer->out, ">"); if (count < 0) return -1; sum += count; p->state = XML_TEXTWRITER_TEXT; break; case XML_TEXTWRITER_CDATA: xmlGenericError(xmlGenericErrorContext, "xmlTextWriterStartCDATA : CDATA not allowed in
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -