⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlwriter.c

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 C
📖 第 1 页 / 共 5 页
字号:
 */intxmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version,                           const char *encoding, const char *standalone){    int count;    int sum;    xmlLinkPtr lk;    xmlCharEncodingHandlerPtr encoder;    if ((writer == NULL) || (writer->out == NULL)) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterStartDocument : invalid writer!\n");        return -1;    }    lk = xmlListFront(writer->nodes);    if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterStartDocument : not allowed in this context!\n");        return -1;    }    encoder = NULL;    if (encoding != NULL) {        encoder = xmlFindCharEncodingHandler(encoding);        if (encoder == NULL) {            xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,                            "xmlTextWriterStartDocument : out of memory!\n");            return -1;        }    }    writer->out->encoder = encoder;    if (encoder != NULL) {        writer->out->conv = xmlBufferCreateSize(4000);        xmlCharEncOutFunc(encoder, writer->out->conv, NULL);    } else        writer->out->conv = NULL;    sum = 0;    count = xmlOutputBufferWriteString(writer->out, "<?xml version=");    if (count < 0)        return -1;    sum += count;    count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);    if (count < 0)        return -1;    sum += count;    if (version != 0)        count = xmlOutputBufferWriteString(writer->out, version);    else        count = xmlOutputBufferWriteString(writer->out, "1.0");    if (count < 0)        return -1;    sum += count;    count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);    if (count < 0)        return -1;    sum += count;    if (writer->out->encoder != 0) {        count = xmlOutputBufferWriteString(writer->out, " encoding=");        if (count < 0)            return -1;        sum += count;        count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);        if (count < 0)            return -1;        sum += count;        count =            xmlOutputBufferWriteString(writer->out,                                       writer->out->encoder->name);        if (count < 0)            return -1;        sum += count;        count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);        if (count < 0)            return -1;        sum += count;    }    if (standalone != 0) {        count = xmlOutputBufferWriteString(writer->out, " standalone=");        if (count < 0)            return -1;        sum += count;        count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);        if (count < 0)            return -1;        sum += count;        count = xmlOutputBufferWriteString(writer->out, standalone);        if (count < 0)            return -1;        sum += count;        count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);        if (count < 0)            return -1;        sum += count;    }    count = xmlOutputBufferWriteString(writer->out, "?>\n");    if (count < 0)        return -1;    sum += count;    return sum;}/** * xmlTextWriterEndDocument: * @writer:  the xmlTextWriterPtr * * End an xml document. All open elements are closed * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterEndDocument(xmlTextWriterPtr writer){    int count;    int sum;    xmlLinkPtr lk;    xmlTextWriterStackEntry *p;    if (writer == NULL) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterEndDocument : invalid writer!\n");        return -1;    }    sum = 0;    while ((lk = xmlListFront(writer->nodes)) != NULL) {        p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);        if (p == 0)            break;        switch (p->state) {            case XML_TEXTWRITER_NAME:            case XML_TEXTWRITER_ATTRIBUTE:            case XML_TEXTWRITER_TEXT:                count = xmlTextWriterEndElement(writer);                if (count < 0)                    return -1;                sum += count;                break;            case XML_TEXTWRITER_PI:            case XML_TEXTWRITER_PI_TEXT:                count = xmlTextWriterEndPI(writer);                if (count < 0)                    return -1;                sum += count;                break;            case XML_TEXTWRITER_CDATA:                count = xmlTextWriterEndCDATA(writer);                if (count < 0)                    return -1;                sum += count;                break;            case XML_TEXTWRITER_DTD:            case XML_TEXTWRITER_DTD_TEXT:            case XML_TEXTWRITER_DTD_ELEM:            case XML_TEXTWRITER_DTD_ELEM_TEXT:            case XML_TEXTWRITER_DTD_ATTL:            case XML_TEXTWRITER_DTD_ATTL_TEXT:            case XML_TEXTWRITER_DTD_ENTY:            case XML_TEXTWRITER_DTD_ENTY_TEXT:            case XML_TEXTWRITER_DTD_PENT:                count = xmlTextWriterEndDTD(writer);                if (count < 0)                    return -1;                sum += count;                break;            case XML_TEXTWRITER_COMMENT:                count = xmlTextWriterEndComment(writer);                if (count < 0)                    return -1;                sum += count;                break;            default:                break;        }    }    if (!writer->indent) {        count = xmlOutputBufferWriteString(writer->out, "\n");        if (count < 0)            return -1;        sum += count;    }    return sum;}/** * xmlTextWriterStartComment: * @writer:  the xmlTextWriterPtr * * Start an xml comment. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterStartComment(xmlTextWriterPtr writer){    int count;    int sum;    xmlLinkPtr lk;    xmlTextWriterStackEntry *p;    if (writer == NULL) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterStartComment : invalid writer!\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_TEXT:                case XML_TEXTWRITER_NONE:                    break;                case XML_TEXTWRITER_NAME:                    count = xmlOutputBufferWriteString(writer->out, ">");                    if (count < 0)                        return -1;                    sum += count;                    if (writer->indent) {                        count =                            xmlOutputBufferWriteString(writer->out, "\n");                        if (count < 0)                            return -1;                        sum += count;                    }                    p->state = XML_TEXTWRITER_TEXT;                    break;                default:                    return -1;            }        }    }    p = (xmlTextWriterStackEntry *)        xmlMalloc(sizeof(xmlTextWriterStackEntry));    if (p == 0) {        xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,                        "xmlTextWriterStartElement : out of memory!\n");        return -1;    }    p->name = 0;    p->state = XML_TEXTWRITER_COMMENT;    xmlListPushFront(writer->nodes, p);    if (writer->indent) {        count = xmlTextWriterWriteIndent(writer);        if (count < 0)            return -1;        sum += count;    }    count = xmlOutputBufferWriteString(writer->out, "<!--");    if (count < 0)        return -1;    sum += count;    return sum;}/** * xmlTextWriterEndComment: * @writer:  the xmlTextWriterPtr * * End the current xml coment. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterEndComment(xmlTextWriterPtr writer){    int count;    int sum;    xmlLinkPtr lk;    xmlTextWriterStackEntry *p;    if (writer == NULL) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterEndComment : invalid writer!\n");        return -1;    }    lk = xmlListFront(writer->nodes);    if (lk == 0) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterEndComment : not allowed in this context!\n");        return -1;    }    p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);    if (p == 0)        return -1;    sum = 0;    switch (p->state) {        case XML_TEXTWRITER_COMMENT:            count = xmlOutputBufferWriteString(writer->out, "-->");            if (count < 0)                return -1;            sum += count;            break;        default:            return -1;    }    if (writer->indent) {        count = xmlOutputBufferWriteString(writer->out, "\n");        if (count < 0)            return -1;        sum += count;    }    xmlListPopFront(writer->nodes);    return sum;}/** * xmlTextWriterWriteFormatComment: * @writer:  the xmlTextWriterPtr * @format:  format string (see printf) * @...:  extra parameters for the format * * Write an xml comment. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,                                const char *format, ...){    int rc;    va_list ap;    va_start(ap, format);    rc = xmlTextWriterWriteVFormatComment(writer, format, ap);    va_end(ap);    return rc;}/** * xmlTextWriterWriteVFormatComment: * @writer:  the xmlTextWriterPtr * @format:  format string (see printf) * @argptr:  pointer to the first member of the variable argument list. * * Write an xml comment. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,                                 const char *format, va_list argptr){    int rc;    xmlChar *buf;    if (writer == NULL) {        xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,                        "xmlTextWriterWriteVFormatComment : invalid writer!\n");        return -1;    }    buf = xmlTextWriterVSprintf(format, argptr);    if (buf == 0)        return 0;    rc = xmlTextWriterWriteComment(writer, buf);    xmlFree(buf);    return rc;}/** * xmlTextWriterWriteComment: * @writer:  the xmlTextWriterPtr * @content:  comment string * * Write an xml comment. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content){    int count;    int sum;    sum = 0;    count = xmlTextWriterStartComment(writer);    if (count < 0)        return -1;    sum += count;    count = xmlTextWriterWriteString(writer, content);    if (count < 0)        return -1;    sum += count;    count = xmlTextWriterEndComment(writer);    if (count < 0)        return -1;    sum += count;    return sum;}/** * xmlTextWriterStartElement: * @writer:  the xmlTextWriterPtr * @name:  element name * * Start an xml element. * * Returns the bytes written (may be 0 because of buffering) or -1 in case of error */intxmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name){    int count;    int sum;    xmlLinkPtr lk;    xmlTextWriterStackEntry *p;    if ((writer == NULL) || (name == NULL) || (*name == '\0'))        return -1;    sum = 0;    lk = xmlListFront(writer->nodes);    if (lk != 0) {        p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);        if (p != 0) {            switch (p->state) {                case XML_TEXTWRITER_PI:                case XML_TEXTWRITER_PI_TEXT:                    return -1;                case XML_TEXTWRITER_NONE:                    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;                    if (writer->indent)                        count =                            xmlOutputBufferWriteString(writer->out, "\n");                    p->state = XML_TEXTWRITER_TEXT;                    break;                default:                    break;            }        }    }    p = (xmlTextWriterStackEntry *)        xmlMalloc(sizeof(xmlTextWriterStackEntry));    if (p == 0) {        xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,                        "xmlTextWriterStartElement : out of memory!\n");        return -1;    }    p->name = xmlStrdup(name);    if (p->name == 0) {        xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,                        "xmlTextWriterStartElement : out of memory!\n");        xmlFree(p);        return -1;    }    p->state = XML_TEXTWRITER_NAME;    xmlListPushFront(writer->nodes, p);    if (writer->indent) {        count = xmlTextWriterWriteIndent(writer);        sum += count;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -