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

📄 xml.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
						Z_STRVAL_PP(myval) = erealloc(Z_STRVAL_PP(myval),newlen+1);						strcpy(Z_STRVAL_PP(myval) + Z_STRLEN_PP(myval),decoded_value);						Z_STRLEN_PP(myval) += decoded_len;						efree(decoded_value);					} else {						add_assoc_string(*(parser->ctag),"value",decoded_value,0);					}									} else {					zval *tag;					MAKE_STD_ZVAL(tag);										array_init(tag);										_xml_add_to_info(parser,parser->ltags[parser->level-1] + parser->toffset);					add_assoc_string(tag,"tag",parser->ltags[parser->level-1] + parser->toffset,1);					add_assoc_string(tag,"value",decoded_value,0);					add_assoc_string(tag,"type","cdata",1);					add_assoc_long(tag,"level",parser->level);					zend_hash_next_index_insert(Z_ARRVAL_P(parser->data),&tag,sizeof(zval*),NULL);				}			} else {				efree(decoded_value);			}		}	}}/* }}} *//* {{{ _xml_processingInstructionHandler() */void _xml_processingInstructionHandler(void *userData, const XML_Char *target, const XML_Char *data){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->processingInstructionHandler) {		zval *retval, *args[3];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(target, 0, parser->target_encoding);		args[2] = _xml_xmlchar_zval(data, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, 3, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//* {{{ _xml_defaultHandler() */void _xml_defaultHandler(void *userData, const XML_Char *s, int len){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->defaultHandler) {		zval *retval, *args[2];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->defaultHandler, 2, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//* {{{ _xml_unparsedEntityDeclHandler() */void _xml_unparsedEntityDeclHandler(void *userData, 										 const XML_Char *entityName, 										 const XML_Char *base,										 const XML_Char *systemId,										 const XML_Char *publicId,										 const XML_Char *notationName){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->unparsedEntityDeclHandler) {		zval *retval, *args[6];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(entityName, 0, parser->target_encoding);		args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);		args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);		args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);		args[5] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, 6, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//* {{{ _xml_notationDeclHandler() */void _xml_notationDeclHandler(void *userData,							  const XML_Char *notationName,							  const XML_Char *base,							  const XML_Char *systemId,							  const XML_Char *publicId){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->notationDeclHandler) {		zval *retval, *args[5];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding);		args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);		args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);		args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->notationDeclHandler, 5, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//* {{{ _xml_externalEntityRefHandler() */int _xml_externalEntityRefHandler(XML_Parser parserPtr,								   const XML_Char *openEntityNames,								   const XML_Char *base,								   const XML_Char *systemId,								   const XML_Char *publicId){	xml_parser *parser = XML_GetUserData(parserPtr);	int ret = 0; /* abort if no handler is set (should be configurable?) */	if (parser && parser->externalEntityRefHandler) {		zval *retval, *args[5];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(openEntityNames, 0, parser->target_encoding);		args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding);		args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding);		args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, 5, args))) {			convert_to_long(retval);			ret = Z_LVAL_P(retval);			efree(retval);		} else {			ret = 0;		}	}	return ret;}/* }}} *//* {{{ _xml_startNamespaceDeclHandler() */void _xml_startNamespaceDeclHandler(void *userData,const XML_Char *prefix, const XML_Char *uri){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->startNamespaceDeclHandler) {		zval *retval, *args[3];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);		args[2] = _xml_xmlchar_zval(uri, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, 3, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//* {{{ _xml_endNamespaceDeclHandler() */void _xml_endNamespaceDeclHandler(void *userData, const XML_Char *prefix){	xml_parser *parser = (xml_parser *)userData;	if (parser && parser->endNamespaceDeclHandler) {		zval *retval, *args[2];		args[0] = _xml_resource_zval(parser->index);		args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding);		if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, 2, args))) {			zval_dtor(retval);			efree(retval);		}	}}/* }}} *//************************* EXTENSION FUNCTIONS *************************//* {{{ proto resource xml_parser_create([string encoding])    Create an XML parser */PHP_FUNCTION(xml_parser_create){	xml_parser *parser;	int argc;	zval **encodingArg;	XML_Char *encoding;		argc = ZEND_NUM_ARGS();	if (argc > 1 || zend_get_parameters_ex(argc, &encodingArg) == FAILURE) {		WRONG_PARAM_COUNT;	}	if (argc == 1) {		convert_to_string_ex(encodingArg);		/* The supported encoding types are hardcoded here because		 * we are limited to the encodings supported by expat/xmltok.		 */		if (strncasecmp(Z_STRVAL_PP(encodingArg), "ISO-8859-1",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "ISO-8859-1";		} else if (strncasecmp(Z_STRVAL_PP(encodingArg), "UTF-8",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "UTF-8";		} else if (strncasecmp(Z_STRVAL_PP(encodingArg), "US-ASCII",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "US-ASCII";		} else { /* UTF-16 not supported */			php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported source encoding \"%s\"", Z_STRVAL_PP(encodingArg));			RETURN_FALSE;		}	} else {		encoding = XML(default_encoding);	}	parser = ecalloc(sizeof(xml_parser), 1);	parser->parser = XML_ParserCreate(encoding);	parser->target_encoding = encoding;	parser->case_folding = 1;	parser->object = NULL;	parser->isparsing = 0;	XML_SetUserData(parser->parser, parser);	ZEND_REGISTER_RESOURCE(return_value,parser,le_xml_parser);	parser->index = Z_LVAL_P(return_value);}/* }}} *//* {{{ proto resource xml_parser_create_ns([string encoding [, string sep]])    Create an XML parser */PHP_FUNCTION(xml_parser_create_ns){	xml_parser *parser;	int argc;	zval **encodingArg, **sepArg;	XML_Char *encoding, *sep;		argc = ZEND_NUM_ARGS();	if (argc > 2 || zend_get_parameters_ex(argc, &encodingArg, &sepArg) == FAILURE) {		WRONG_PARAM_COUNT;	}	if (argc >= 1) {		convert_to_string_ex(encodingArg);		/* The supported encoding types are hardcoded here because		 * we are limited to the encodings supported by expat/xmltok.		 */		if (strncasecmp(Z_STRVAL_PP(encodingArg), "ISO-8859-1",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "ISO-8859-1";		} else if (strncasecmp(Z_STRVAL_PP(encodingArg), "UTF-8",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "UTF-8";		} else if (strncasecmp(Z_STRVAL_PP(encodingArg), "US-ASCII",						Z_STRLEN_PP(encodingArg)) == 0) {			encoding = "US-ASCII";		} else { /* UTF-16 not supported */			php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported source encoding \"%s\"", Z_STRVAL_PP(encodingArg));			RETURN_FALSE;		}	} else {		encoding = XML(default_encoding);	}	if (argc == 2){		convert_to_string_ex(sepArg);		sep = Z_STRVAL_PP(sepArg);	} else {		sep = ":";	}	parser = ecalloc(sizeof(xml_parser), 1);	parser->parser = XML_ParserCreateNS(encoding, sep[0]);	parser->target_encoding = encoding;	parser->case_folding = 1;	parser->object = NULL;	XML_SetUserData(parser->parser, parser);	ZEND_REGISTER_RESOURCE(return_value,parser,le_xml_parser);	parser->index = Z_LVAL_P(return_value);}/* }}} *//* {{{ proto int xml_set_object(resource parser, object &obj)    Set up object which should be used for callbacks */PHP_FUNCTION(xml_set_object){	xml_parser *parser;	zval **pind, **mythis;	if (ZEND_NUM_ARGS() != 2 ||		zend_get_parameters_ex(2, &pind, &mythis) == FAILURE) {		WRONG_PARAM_COUNT;	}	if (Z_TYPE_PP(mythis) != IS_OBJECT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument 2 has wrong type");		RETURN_FALSE;	}	ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);	/* please leave this commented - or ask thies@thieso.net before doing it (again) */#ifdef ZEND_ENGINE_2	if (parser->object) {		zval_ptr_dtor(&parser->object);	}#endif		parser->object = *mythis;	/* please leave this commented - or ask thies@thieso.net before doing it (again) *//* #ifdef ZEND_ENGINE_2	zval_add_ref(&parser->object); #endif */	RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_element_handler(resource parser, string shdl, string ehdl)    Set up start and end element handlers */PHP_FUNCTION(xml_set_element_handler){	xml_parser *parser;	zval **pind, **shdl, **ehdl;	if (ZEND_NUM_ARGS() != 3 ||		zend_get_parameters_ex(3, &pind, &shdl, &ehdl) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(parser,xml_parser *,pind, -1, "XML Parser", le_xml_parser);	xml_set_handler(&parser->startElementHandler, shdl);	xml_set_handler(&parser->endElementHandler, ehdl);	XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler);	RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_character_data_handler(resource parser, string hdl)    Set up character data handler */PHP_FUNCTION(xml_set_character_data_handler){	xml_parser *parser;	zval **pind, **hdl;	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);	xml_set_handler(&parser->characterDataHandler, hdl);	XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler);	RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_processing_instruction_handler(resource parser, string hdl)    Set up processing instruction (PI) handler */PHP_FUNCTION(xml_set_processing_instruction_handler){	xml_parser *parser;	zval **pind, **hdl;	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);	xml_set_handler(&parser->processingInstructionHandler, hdl);	XML_SetProcessingInstructionHandler(parser->parser, _xml_processingInstructionHandler);	RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_default_handler(resource parser, string hdl)    Set up default handler */PHP_FUNCTION(xml_set_default_handler){	xml_parser *parser;	zval **pind, **hdl;	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &hdl) == FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser);	xml_set_handler(&parser->defaultHandler, hdl);	XML_SetDefaultHandler(parser->parser, _xml_defaultHandler);

⌨️ 快捷键说明

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