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

📄 libxml.c

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 C
📖 第 1 页 / 共 5 页
字号:
/** * libxml_outputBufferGetPythonFile: * @buffer:  the I/O buffer * * read the Python I/O from the CObject * * Returns the new parser output or NULL */static PyObject *libxml_outputBufferGetPythonFile(ATTRIBUTE_UNUSED PyObject *self,                                    PyObject *args) {    PyObject *buffer;    PyObject *file;    xmlOutputBufferPtr obj;    if (!PyArg_ParseTuple(args, (char *)"O:outputBufferGetPythonFile",			  &buffer))	return(NULL);    obj = PyoutputBuffer_Get(buffer);    if (obj == NULL) {	fprintf(stderr,	        "outputBufferGetPythonFile: obj == NULL\n");	Py_INCREF(Py_None);	return(Py_None);    }    if (obj->closecallback != xmlPythonFileClose) {	fprintf(stderr,	        "outputBufferGetPythonFile: not a python file wrapper\n");	Py_INCREF(Py_None);	return(Py_None);    }    file = (PyObject *) obj->context;    if (file == NULL) {	Py_INCREF(Py_None);	return(Py_None);    }    Py_INCREF(file);    return(file);}static PyObject *libxml_xmlOutputBufferClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {    PyObject *py_retval;    int c_retval;    xmlOutputBufferPtr out;    PyObject *pyobj_out;    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferClose", &pyobj_out))        return(NULL);    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);    /* Buffer may already have been destroyed elsewhere. This is harmless. */    if (out == NULL) {	Py_INCREF(Py_None);	return(Py_None);    }    c_retval = xmlOutputBufferClose(out);    py_retval = libxml_intWrap((int) c_retval);    return(py_retval);}static PyObject *libxml_xmlOutputBufferFlush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {    PyObject *py_retval;    int c_retval;    xmlOutputBufferPtr out;    PyObject *pyobj_out;    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferFlush", &pyobj_out))        return(NULL);    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);    c_retval = xmlOutputBufferFlush(out);    py_retval = libxml_intWrap((int) c_retval);    return(py_retval);}static PyObject *libxml_xmlSaveFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {    PyObject *py_retval;    int c_retval;    xmlOutputBufferPtr buf;    PyObject *pyobj_buf;    xmlDocPtr cur;    PyObject *pyobj_cur;    char * encoding;    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSaveFileTo", &pyobj_buf, &pyobj_cur, &encoding))        return(NULL);    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);    c_retval = xmlSaveFileTo(buf, cur, encoding);	/* xmlSaveTo() freed the memory pointed to by buf, so record that in the	 * Python object. */    ((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;    py_retval = libxml_intWrap((int) c_retval);    return(py_retval);}static PyObject *libxml_xmlSaveFormatFileTo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {    PyObject *py_retval;    int c_retval;    xmlOutputBufferPtr buf;    PyObject *pyobj_buf;    xmlDocPtr cur;    PyObject *pyobj_cur;    char * encoding;    int format;    if (!PyArg_ParseTuple(args, (char *)"OOzi:xmlSaveFormatFileTo", &pyobj_buf, &pyobj_cur, &encoding, &format))        return(NULL);    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);    c_retval = xmlSaveFormatFileTo(buf, cur, encoding, format);	/* xmlSaveFormatFileTo() freed the memory pointed to by buf, so record that	 * in the Python object */	((PyoutputBuffer_Object *)(pyobj_buf))->obj = NULL;    py_retval = libxml_intWrap((int) c_retval);    return(py_retval);}#endif /* LIBXML_OUTPUT_ENABLED *//** * xmlParserInputBufferCreatePythonFile: * @file:  a PyFile_Type * @encoder:  the encoding converter or NULL * * Create a buffered output for the progressive saving to a PyFile_Type * buffered C I/O * * Returns the new parser output or NULL */static xmlParserInputBufferPtrxmlParserInputBufferCreatePythonFile(PyObject *file, 	                        xmlCharEncoding encoding) {    xmlParserInputBufferPtr ret;    if (file == NULL) return(NULL);    ret = xmlAllocParserInputBuffer(encoding);    if (ret != NULL) {        ret->context = file;	/* Py_INCREF(file); */	ret->readcallback = xmlPythonFileRead;	ret->closecallback = xmlPythonFileClose;    }    return(ret);}PyObject *libxml_xmlCreateInputBuffer(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {    PyObject *py_retval;    PyObject *file;    xmlChar  *encoding;    xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;    xmlParserInputBufferPtr buffer;    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParserInputBufferCreate",		&file, &encoding))	return(NULL);    if ((encoding != NULL) && (encoding[0] != 0)) {	enc = xmlParseCharEncoding((const char *) encoding);    }    buffer = xmlParserInputBufferCreatePythonFile(file, enc);    if (buffer == NULL)	printf("libxml_xmlParserInputBufferCreate: buffer == NULL\n");    py_retval = libxml_xmlParserInputBufferPtrWrap(buffer);    return(py_retval);}/************************************************************************ *									* *		Providing the resolver at the Python level		* *									* ************************************************************************/static xmlExternalEntityLoader defaultExternalEntityLoader = NULL;static PyObject *pythonExternalEntityLoaderObjext;static xmlParserInputPtrpythonExternalEntityLoader(const char *URL, const char *ID,			   xmlParserCtxtPtr ctxt) {    xmlParserInputPtr result = NULL;    if (pythonExternalEntityLoaderObjext != NULL) {	PyObject *ret;	PyObject *ctxtobj;	ctxtobj = libxml_xmlParserCtxtPtrWrap(ctxt);#ifdef DEBUG_LOADER	printf("pythonExternalEntityLoader: ready to call\n");#endif	ret = PyObject_CallFunction(pythonExternalEntityLoaderObjext,		      (char *) "(ssO)", URL, ID, ctxtobj);	Py_XDECREF(ctxtobj);#ifdef DEBUG_LOADER	printf("pythonExternalEntityLoader: result ");	PyObject_Print(ret, stderr, 0);	printf("\n");#endif	if (ret != NULL) {	    if (PyObject_HasAttrString(ret, (char *) "read")) {		xmlParserInputBufferPtr buf;		buf = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);		if (buf != NULL) {		    buf->context = ret;		    buf->readcallback = xmlPythonFileReadRaw;		    buf->closecallback = xmlPythonFileCloseRaw;		    result = xmlNewIOInputStream(ctxt, buf,			                         XML_CHAR_ENCODING_NONE);		}	    } else {		printf("pythonExternalEntityLoader: can't read\n");	    }	    if (result == NULL) {		Py_DECREF(ret);	    } else if (URL != NULL) {		result->filename = (char *) xmlStrdup((const xmlChar *)URL);		result->directory = xmlParserGetDirectory((const char *) URL);	    }	}    }    if ((result == NULL) && (defaultExternalEntityLoader != NULL)) {	result = defaultExternalEntityLoader(URL, ID, ctxt);    }    return(result);}PyObject *libxml_xmlSetEntityLoader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {    PyObject *py_retval;    PyObject *loader;    if (!PyArg_ParseTuple(args, (char *)"O:libxml_xmlSetEntityLoader",		&loader))	return(NULL);#ifdef DEBUG_LOADER    printf("libxml_xmlSetEntityLoader\n");#endif    if (defaultExternalEntityLoader == NULL) 	defaultExternalEntityLoader = xmlGetExternalEntityLoader();    pythonExternalEntityLoaderObjext = loader;    xmlSetExternalEntityLoader(pythonExternalEntityLoader);    py_retval = PyInt_FromLong(0);    return(py_retval);}/************************************************************************ *									* *		Handling SAX/xmllib/sgmlop callback interfaces		* *									* ************************************************************************/static voidpythonStartElement(void *user_data, const xmlChar * name,                   const xmlChar ** attrs){    int i;    PyObject *handler;    PyObject *dict;    PyObject *attrname;    PyObject *attrvalue;    PyObject *result = NULL;    int type = 0;#ifdef DEBUG_SAX    printf("pythonStartElement(%s) called\n", name);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "startElement"))        type = 1;    else if (PyObject_HasAttrString(handler, (char *) "start"))        type = 2;    if (type != 0) {        /*         * the xmllib interface always generate a dictionnary,         * possibly empty         */        if ((attrs == NULL) && (type == 1)) {            Py_XINCREF(Py_None);            dict = Py_None;        } else if (attrs == NULL) {            dict = PyDict_New();        } else {            dict = PyDict_New();            for (i = 0; attrs[i] != NULL; i++) {                attrname = PyString_FromString((char *) attrs[i]);                i++;                if (attrs[i] != NULL) {                    attrvalue = PyString_FromString((char *) attrs[i]);                } else {                    Py_XINCREF(Py_None);                    attrvalue = Py_None;                }                PyDict_SetItem(dict, attrname, attrvalue);            }        }        if (type == 1)            result = PyObject_CallMethod(handler, (char *) "startElement",                                         (char *) "sO", name, dict);        else if (type == 2)            result = PyObject_CallMethod(handler, (char *) "start",                                         (char *) "sO", name, dict);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(dict);        Py_XDECREF(result);    }}static voidpythonStartDocument(void *user_data){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonStartDocument() called\n");#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "startDocument")) {        result =            PyObject_CallMethod(handler, (char *) "startDocument", NULL);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonEndDocument(void *user_data){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonEndDocument() called\n");#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "endDocument")) {        result =            PyObject_CallMethod(handler, (char *) "endDocument", NULL);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }    /*     * The reference to the handler is released there     */    Py_XDECREF(handler);}static voidpythonEndElement(void *user_data, const xmlChar * name){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonEndElement(%s) called\n", name);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "endElement")) {        result = PyObject_CallMethod(handler, (char *) "endElement",                                     (char *) "s", name);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    } else if (PyObject_HasAttrString(handler, (char *) "end")) {        result = PyObject_CallMethod(handler, (char *) "end",                                     (char *) "s", name);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonReference(void *user_data, const xmlChar * name){    PyObject *handler;    PyObject *result;#ifdef DEBUG_SAX    printf("pythonReference(%s) called\n", name);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "reference")) {        result = PyObject_CallMethod(handler, (char *) "reference",                                     (char *) "s", name);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonCharacters(void *user_data, const xmlChar * ch, int len){    PyObject *handler;    PyObject *result = NULL;    int type = 0;#ifdef DEBUG_SAX    printf("pythonCharacters(%s, %d) called\n", ch, len);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "characters"))        type = 1;    else if (PyObject_HasAttrString(handler, (char *) "data"))        type = 2;    if (type != 0) {        if (type == 1)            result = PyObject_CallMethod(handler, (char *) "characters",                                         (char *) "s#", ch, len);        else if (type == 2)            result = PyObject_CallMethod(handler, (char *) "data",                                         (char *) "s#", ch, len);        if (PyErr_Occurred())            PyErr_Print();        Py_XDECREF(result);    }}static voidpythonIgnorableWhitespace(void *user_data, const xmlChar * ch, int len){    PyObject *handler;    PyObject *result = NULL;    int type = 0;#ifdef DEBUG_SAX    printf("pythonIgnorableWhitespace(%s, %d) called\n", ch, len);#endif    handler = (PyObject *) user_data;    if (PyObject_HasAttrString(handler, (char *) "ignorableWhitespace"))        type = 1;    else if (PyObject_HasAttrString(handler, (char *) "data"))        type = 2;    if (type != 0) {        if (type == 1)            result =                PyObject_CallMethod(handler,                                    (char *) "ignorableWhitespace",                                    (char *) "s#", ch, len);        else if (type == 2)            result =

⌨️ 快捷键说明

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