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

📄 libxml.c

📁 xml开源解析代码.版本为libxml2-2.6.29,可支持GB3212.网络消息发送XML时很有用.
💻 C
📖 第 1 页 / 共 5 页
字号:
                                    (char *) "ignorableWhitespace",                                    (char *) "s#", ch, len);        else if (type == 2)            result =                PyObject_CallMethod(handler, (char *) "data",                                    (char *) "s#", ch, len);        Py_XDECREF(result);    }}static voidpythonProcessingInstruction(void *user_data,                            const xmlChar * target, const xmlChar * data){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonProcessingInstruction(%s, %s) called\n", target, data);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "processingInstruction")) {        result = PyObject_CallMethod(handler, (char *)                                     "processingInstruction",                                     (char *) "ss", target, data);        Py_XDECREF(result);    }}static voidpythonComment(void *user_data, const xmlChar * value){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonComment(%s) called\n", value);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "comment")) {        result =            PyObject_CallMethod(handler, (char *) "comment", (char *) "s",                                value);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonWarning(void *user_data, const char *msg, ...){    PyObject *handler;    PyObject *result;    va_list args;    char buf[1024];#ifdef DEBUG_SAX    printf("pythonWarning(%s) called\n", msg);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "warning")) {        va_start(args, msg);        vsnprintf(buf, 1023, msg, args);        va_end(args);        buf[1023] = 0;        result =            PyObject_CallMethod(handler, (char *) "warning", (char *) "s",                                buf);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonError(void *user_data, const char *msg, ...){    PyObject *handler;    PyObject *result;    va_list args;    char buf[1024];#ifdef DEBUG_SAX    printf("pythonError(%s) called\n", msg);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "error")) {        va_start(args, msg);        vsnprintf(buf, 1023, msg, args);        va_end(args);        buf[1023] = 0;        result =            PyObject_CallMethod(handler, (char *) "error", (char *) "s",                                buf);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonFatalError(void *user_data, const char *msg, ...){    PyObject *handler;    PyObject *result;    va_list args;    char buf[1024];#ifdef DEBUG_SAX    printf("pythonFatalError(%s) called\n", msg);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "fatalError")) {        va_start(args, msg);        vsnprintf(buf, 1023, msg, args);        va_end(args);        buf[1023] = 0;        result =            PyObject_CallMethod(handler, (char *) "fatalError",                                (char *) "s", buf);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonCdataBlock(void *user_data, const xmlChar * ch, int len){    PyObject *handler;    PyObject *result = NULL;    int type = 0;#ifdef DEBUG_SAX    printf("pythonCdataBlock(%s, %d) called\n", ch, len);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "cdataBlock"))        type = 1;    else if (PyObject_HasAttrString(handler, (char *) "cdata"))        type = 2;    if (type != 0) {        if (type == 1)            result =                PyObject_CallMethod(handler, (char *) "cdataBlock",                                    (char *) "s#", ch, len);        else if (type == 2)            result =                PyObject_CallMethod(handler, (char *) "cdata",                                    (char *) "s#", ch, len);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonExternalSubset(void *user_data,                     const xmlChar * name,                     const xmlChar * externalID, const xmlChar * systemID){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonExternalSubset(%s, %s, %s) called\n",           name, externalID, systemID);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "externalSubset")) {        result =            PyObject_CallMethod(handler, (char *) "externalSubset",                                (char *) "sss", name, externalID,                                systemID);        Py_XDECREF(result);    }}static voidpythonEntityDecl(void *user_data,                 const xmlChar * name,                 int type,                 const xmlChar * publicId,                 const xmlChar * systemId, xmlChar * content){    PyObject *handler;    PyObject *result;    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "entityDecl")) {        result = PyObject_CallMethod(handler, (char *) "entityDecl",                                     (char *) "sisss", name, type,                                     publicId, systemId, content);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonNotationDecl(void *user_data,                   const xmlChar * name,                   const xmlChar * publicId, const xmlChar * systemId){    PyObject *handler;    PyObject *result;    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "notationDecl")) {        result = PyObject_CallMethod(handler, (char *) "notationDecl",                                     (char *) "sss", name, publicId,                                     systemId);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonAttributeDecl(void *user_data,                    const xmlChar * elem,                    const xmlChar * name,                    int type,                    int def,                    const xmlChar * defaultValue, xmlEnumerationPtr tree){    PyObject *handler;    PyObject *nameList;    PyObject *newName;    xmlEnumerationPtr node;    PyObject *result;    int count;    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "attributeDecl")) {        count = 0;        for (node = tree; node != NULL; node = node->next) {            count++;        }        nameList = PyList_New(count);        count = 0;        for (node = tree; node != NULL; node = node->next) {            newName = PyString_FromString((char *) node->name);            PyList_SetItem(nameList, count, newName);	    Py_DECREF(newName);            count++;        }        result = PyObject_CallMethod(handler, (char *) "attributeDecl",                                     (char *) "ssiisO", elem, name, type,                                     def, defaultValue, nameList);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(nameList);        Py_XDECREF(result);    }}static voidpythonElementDecl(void *user_data,                  const xmlChar * name,                  int type, ATTRIBUTE_UNUSED xmlElementContentPtr content){    PyObject *handler;    PyObject *obj;    PyObject *result;    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "elementDecl")) {        /* TODO: wrap in an elementContent object */        printf            ("pythonElementDecl: xmlElementContentPtr wrapper missing !\n");        obj = Py_None;        /* Py_XINCREF(Py_None); isn't the reference just borrowed ??? */        result = PyObject_CallMethod(handler, (char *) "elementDecl",                                     (char *) "siO", name, type, obj);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonUnparsedEntityDecl(void *user_data,                         const xmlChar * name,                         const xmlChar * publicId,                         const xmlChar * systemId,                         const xmlChar * notationName){    PyObject *handler;    PyObject *result;    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "unparsedEntityDecl")) {        result =            PyObject_CallMethod(handler, (char *) "unparsedEntityDecl",                                (char *) "ssss", name, publicId, systemId,                                notationName);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonInternalSubset(void *user_data, const xmlChar * name,                     const xmlChar * ExternalID, const xmlChar * SystemID){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonInternalSubset(%s, %s, %s) called\n",           name, ExternalID, SystemID);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "internalSubset")) {        result = PyObject_CallMethod(handler, (char *) "internalSubset",                                     (char *) "sss", name, ExternalID,                                     SystemID);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static xmlSAXHandler pythonSaxHandler = {    pythonInternalSubset,    NULL,                       /* TODO pythonIsStandalone, */    NULL,                       /* TODO pythonHasInternalSubset, */    NULL,                       /* TODO pythonHasExternalSubset, */    NULL,                       /* TODO pythonResolveEntity, */    NULL,                       /* TODO pythonGetEntity, */    pythonEntityDecl,    pythonNotationDecl,    pythonAttributeDecl,    pythonElementDecl,    pythonUnparsedEntityDecl,    NULL,                       /* OBSOLETED pythonSetDocumentLocator, */    pythonStartDocument,    pythonEndDocument,    pythonStartElement,    pythonEndElement,    pythonReference,    pythonCharacters,    pythonIgnorableWhitespace,    pythonProcessingInstruction,    pythonComment,    pythonWarning,    pythonError,    pythonFatalError,    NULL,                       /* TODO pythonGetParameterEntity, */    pythonCdataBlock,    pythonExternalSubset,    1,    NULL,			/* TODO mograte to SAX2 */    NULL,    NULL,    NULL};/************************************************************************ *									* *		Handling of specific parser context			* *									* ************************************************************************/PyObject *libxml_xmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,                           PyObject * args){    const char *chunk;    int size;    const char *URI;    PyObject *pyobj_SAX = NULL;    xmlSAXHandlerPtr SAX = NULL;    xmlParserCtxtPtr ret;    PyObject *pyret;    if (!PyArg_ParseTuple        (args, (char *) "Oziz:xmlCreatePushParser", &pyobj_SAX, &chunk,         &size, &URI))        return (NULL);#ifdef DEBUG    printf("libxml_xmlCreatePushParser(%p, %s, %d, %s) called\n",           pyobj_SAX, chunk, size, URI);#endif    if (pyobj_SAX != Py_None) {        SAX = &pythonSaxHandler;        Py_INCREF(pyobj_SAX);        /* The reference is released in pythonEndDocument() */    }    ret = xmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI);    pyret = libxml_xmlParserCtxtPtrWrap(ret);    return (pyret);}PyObject *libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,                            PyObject * args){#ifdef LIBXML_HTML_ENABLED    const char *chunk;    int size;    const char *URI;    PyObject *pyobj_SAX = NULL;    xmlSAXHandlerPtr SAX = NULL;    xmlParserCtxtPtr ret;    PyObject *pyret;    if (!PyArg_ParseTuple        (args, (char *) "Oziz:htmlCreatePushParser", &pyobj_SAX, &chunk,         &size, &URI))        return (NULL);#ifdef DEBUG    printf("libxml_htmlCreatePushParser(%p, %s, %d, %s) called\n",           pyobj_SAX, chunk, size, URI);#endif    if (pyobj_SAX != Py_None) {        SAX = &pythonSaxHandler;        Py_INCREF(pyobj_SAX);        /* The reference is released in pythonEndDocument() */    }    ret = htmlCreatePushParserCtxt(SAX, pyobj_SAX, chunk, size, URI,                                   XML_CHAR_ENCODING_NONE);    pyret = libxml_xmlParserCtxtPtrWrap(ret);    return (pyret);#else    Py_INCREF(Py_None);    return (Py_None);#endif /* LIBXML_HTML_ENABLED */}PyObject *libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args){    int recover;    const char *URI;    PyObject *pyobj_SAX = NULL;    xmlSAXHandlerPtr SAX = NULL;    if (!PyArg_ParseTuple(args, (char *) "Osi:xmlSAXParseFile", &pyobj_SAX,                          &URI, &recover))        return (NULL);#ifdef DEBUG    printf("libxml_xmlSAXParseFile(%p, %s, %d) called\n",           pyobj_SAX, URI, recover);#endif    if (pyobj_SAX == Py_None) {        Py_INCREF(Py_None);        return (Py_None);    }    SAX = &pythonSaxHandler;    Py_INCREF(pyobj_SAX);    /* The reference is released in pythonEndDocument() */    xmlSAXUserParseFile(SAX, pyobj_SAX, URI);    Py_INCREF(Py_None);

⌨️ 快捷键说明

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