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

📄 types.c

📁 xml开源解析代码.版本为libxml2-2.6.29,可支持GB3212.网络消息发送XML时很有用.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * types.c: converter functions between the internal representation *          and the Python objects * * See Copyright for the status of this software. * * daniel@veillard.com */#include "libxml_wrap.h"PyObject *libxml_intWrap(int val){    PyObject *ret;#ifdef DEBUG    printf("libxml_intWrap: val = %d\n", val);#endif    ret = PyInt_FromLong((long) val);    return (ret);}PyObject *libxml_longWrap(long val){    PyObject *ret;#ifdef DEBUG    printf("libxml_longWrap: val = %ld\n", val);#endif    ret = PyInt_FromLong(val);    return (ret);}PyObject *libxml_doubleWrap(double val){    PyObject *ret;#ifdef DEBUG    printf("libxml_doubleWrap: val = %f\n", val);#endif    ret = PyFloat_FromDouble((double) val);    return (ret);}PyObject *libxml_charPtrWrap(char *str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlcharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString(str);    xmlFree(str);    return (ret);}PyObject *libxml_charPtrConstWrap(const char *str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlcharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString(str);    return (ret);}PyObject *libxml_xmlCharPtrWrap(xmlChar * str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlCharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString((char *) str);    xmlFree(str);    return (ret);}PyObject *libxml_xmlCharPtrConstWrap(const xmlChar * str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlCharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString((char *) str);    return (ret);}PyObject *libxml_constcharPtrWrap(const char *str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlcharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString(str);    return (ret);}PyObject *libxml_constxmlCharPtrWrap(const xmlChar * str){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlCharPtrWrap: str = %s\n", str);#endif    if (str == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret = PyString_FromString((char *) str);    return (ret);}PyObject *libxml_xmlDocPtrWrap(xmlDocPtr doc){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlDocPtrWrap: doc = %p\n", doc);#endif    if (doc == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    /* TODO: look at deallocation */    ret =        PyCObject_FromVoidPtrAndDesc((void *) doc, (char *) "xmlDocPtr",                                     NULL);    return (ret);}PyObject *libxml_xmlNodePtrWrap(xmlNodePtr node){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlNodePtrWrap: node = %p\n", node);#endif    if (node == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "xmlNodePtr",                                     NULL);    return (ret);}PyObject *libxml_xmlURIPtrWrap(xmlURIPtr uri){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlURIPtrWrap: uri = %p\n", uri);#endif    if (uri == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) uri, (char *) "xmlURIPtr",                                     NULL);    return (ret);}PyObject *libxml_xmlNsPtrWrap(xmlNsPtr ns){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlNsPtrWrap: node = %p\n", ns);#endif    if (ns == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) ns, (char *) "xmlNsPtr",                                     NULL);    return (ret);}PyObject *libxml_xmlAttrPtrWrap(xmlAttrPtr attr){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlAttrNodePtrWrap: attr = %p\n", attr);#endif    if (attr == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) attr, (char *) "xmlAttrPtr",                                     NULL);    return (ret);}PyObject *libxml_xmlAttributePtrWrap(xmlAttributePtr attr){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlAttributePtrWrap: attr = %p\n", attr);#endif    if (attr == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) attr,                                     (char *) "xmlAttributePtr", NULL);    return (ret);}PyObject *libxml_xmlElementPtrWrap(xmlElementPtr elem){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlElementNodePtrWrap: elem = %p\n", elem);#endif    if (elem == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) elem,                                     (char *) "xmlElementPtr", NULL);    return (ret);}PyObject *libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlXPathContextPtrWrap: ctxt = %p\n", ctxt);#endif    if (ctxt == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) ctxt,                                     (char *) "xmlXPathContextPtr", NULL);    return (ret);}PyObject *libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlXPathParserContextPtrWrap: ctxt = %p\n", ctxt);#endif    if (ctxt == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt,                                       (char *) "xmlXPathParserContextPtr",                                       NULL);    return (ret);}PyObject *libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlParserCtxtPtrWrap: ctxt = %p\n", ctxt);#endif    if (ctxt == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    ret =        PyCObject_FromVoidPtrAndDesc((void *) ctxt,                                     (char *) "xmlParserCtxtPtr", NULL);    return (ret);}PyObject *libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj){    PyObject *ret;#ifdef DEBUG    printf("libxml_xmlXPathObjectPtrWrap: ctxt = %p\n", obj);#endif    if (obj == NULL) {        Py_INCREF(Py_None);        return (Py_None);    }    switch (obj->type) {        case XPATH_XSLT_TREE: {            if ((obj->nodesetval == NULL) ||		(obj->nodesetval->nodeNr == 0) ||		(obj->nodesetval->nodeTab == NULL)) {                ret = PyList_New(0);	    } else {		int i, len = 0;		xmlNodePtr node;		node = obj->nodesetval->nodeTab[0]->children;		while (node != NULL) {		    len++;		    node = node->next;		}		ret = PyList_New(len);		node = obj->nodesetval->nodeTab[0]->children;		for (i = 0;i < len;i++) {                    PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));		    node = node->next;		}	    }	    /*	     * Return now, do not free the object passed down	     */	    return (ret);	}        case XPATH_NODESET:            if ((obj->nodesetval == NULL)                || (obj->nodesetval->nodeNr == 0)) {                ret = PyList_New(0);	    } else {                int i;                xmlNodePtr node;                ret = PyList_New(obj->nodesetval->nodeNr);                for (i = 0; i < obj->nodesetval->nodeNr; i++) {                    node = obj->nodesetval->nodeTab[i];                    /* TODO: try to cast directly to the proper node type */                    PyList_SetItem(ret, i, libxml_xmlNodePtrWrap(node));                }            }            break;        case XPATH_BOOLEAN:            ret = PyInt_FromLong((long) obj->boolval);            break;        case XPATH_NUMBER:            ret = PyFloat_FromDouble(obj->floatval);            break;        case XPATH_STRING:            ret = PyString_FromString((char *) obj->stringval);            break;        case XPATH_POINT:        {            PyObject *node;            PyObject *indexIntoNode;            PyObject *tuple;            node = libxml_xmlNodePtrWrap(obj->user);            indexIntoNode = PyInt_FromLong((long) obj->index);            tuple = PyTuple_New(2);            PyTuple_SetItem(tuple, 0, node);            PyTuple_SetItem(tuple, 1, indexIntoNode);            ret = tuple;            break;        }        case XPATH_RANGE:        {            unsigned short bCollapsedRange;            bCollapsedRange = ( (obj->user2 == NULL) ||		                ((obj->user2 == obj->user) && (obj->index == obj->index2)) );            if ( bCollapsedRange ) {                PyObject *node;                PyObject *indexIntoNode;                PyObject *tuple;                PyObject *list;                list = PyList_New(1);                node = libxml_xmlNodePtrWrap(obj->user);                indexIntoNode = PyInt_FromLong((long) obj->index);                tuple = PyTuple_New(2);

⌨️ 快捷键说明

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