📄 xml.c
字号:
RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_unparsed_entity_decl_handler(resource parser, string hdl) Set up unparsed entity declaration handler */PHP_FUNCTION(xml_set_unparsed_entity_decl_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->unparsedEntityDeclHandler, hdl); XML_SetUnparsedEntityDeclHandler(parser->parser, _xml_unparsedEntityDeclHandler); RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_notation_decl_handler(resource parser, string hdl) Set up notation declaration handler */PHP_FUNCTION(xml_set_notation_decl_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->notationDeclHandler, hdl); XML_SetNotationDeclHandler(parser->parser, _xml_notationDeclHandler); RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_external_entity_ref_handler(resource parser, string hdl) Set up external entity reference handler */PHP_FUNCTION(xml_set_external_entity_ref_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->externalEntityRefHandler, hdl); XML_SetExternalEntityRefHandler(parser->parser, _xml_externalEntityRefHandler); RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_start_namespace_decl_handler(resource parser, string hdl) Set up character data handler */PHP_FUNCTION(xml_set_start_namespace_decl_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->startNamespaceDeclHandler, hdl); XML_SetStartNamespaceDeclHandler(parser->parser, _xml_startNamespaceDeclHandler); RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_set_end_namespace_decl_handler(resource parser, string hdl) Set up character data handler */PHP_FUNCTION(xml_set_end_namespace_decl_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->endNamespaceDeclHandler, hdl); XML_SetEndNamespaceDeclHandler(parser->parser, _xml_endNamespaceDeclHandler); RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_parse(resource parser, string data [, int isFinal]) Start parsing an XML document */PHP_FUNCTION(xml_parse){ xml_parser *parser; zval **pind, **data, **final; int argc, isFinal, ret; argc = ZEND_NUM_ARGS(); if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &pind, &data, &final) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); convert_to_string_ex(data); if (argc == 3) { convert_to_long_ex(final); isFinal = Z_LVAL_PP(final); } else { isFinal = 0; } parser->isparsing = 1; ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), isFinal); parser->isparsing = 0; RETVAL_LONG(ret);}/* }}} *//* {{{ proto int xml_parse_into_struct(resource parser, string data, array &struct, array &index) Parsing a XML document */PHP_FUNCTION(xml_parse_into_struct){ xml_parser *parser; zval **pind, **data, **xdata, **info = 0; int argc, ret; argc = ZEND_NUM_ARGS(); if (zend_get_parameters_ex(4, &pind, &data, &xdata,&info) == SUCCESS) { zval_dtor(*info); array_init(*info); } else if (zend_get_parameters_ex(3, &pind, &data, &xdata) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); convert_to_string_ex(data); zval_dtor(*xdata); array_init(*xdata); parser->data = *xdata; if (info) parser->info = *info; parser->level = 0; parser->ltags = emalloc(XML_MAXLEVEL * sizeof(char *)); XML_SetDefaultHandler(parser->parser, _xml_defaultHandler); XML_SetElementHandler(parser->parser, _xml_startElementHandler, _xml_endElementHandler); XML_SetCharacterDataHandler(parser->parser, _xml_characterDataHandler); parser->isparsing = 1; ret = XML_Parse(parser->parser, Z_STRVAL_PP(data), Z_STRLEN_PP(data), 1); parser->isparsing = 0; RETVAL_LONG(ret);}/* }}} *//* {{{ proto int xml_get_error_code(resource parser) Get XML parser error code */PHP_FUNCTION(xml_get_error_code){ xml_parser *parser; zval **pind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); RETVAL_LONG((long)XML_GetErrorCode(parser->parser));}/* }}} *//* {{{ proto string xml_error_string(int code) Get XML parser error string */PHP_FUNCTION(xml_error_string){ zval **code; char *str; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &code) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(code); str = (char *)XML_ErrorString((int)Z_LVAL_PP(code)); if (str) { RETVAL_STRING(str, 1); }}/* }}} *//* {{{ proto int xml_get_current_line_number(resource parser) Get current line number for an XML parser */PHP_FUNCTION(xml_get_current_line_number){ xml_parser *parser; zval **pind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); RETVAL_LONG(XML_GetCurrentLineNumber(parser->parser));}/* }}} *//* {{{ proto int xml_get_current_column_number(resource parser) Get current column number for an XML parser */PHP_FUNCTION(xml_get_current_column_number){ xml_parser *parser; zval **pind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); RETVAL_LONG(XML_GetCurrentColumnNumber(parser->parser));}/* }}} *//* {{{ proto int xml_get_current_byte_index(resource parser) Get current byte index for an XML parser */PHP_FUNCTION(xml_get_current_byte_index){ xml_parser *parser; zval **pind; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); RETVAL_LONG(XML_GetCurrentByteIndex(parser->parser));}/* }}} *//* {{{ proto int xml_parser_free(resource parser) Free an XML parser */PHP_FUNCTION(xml_parser_free){ zval **pind; xml_parser *parser; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &pind) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); if (parser->isparsing == 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Parser cannot be freed while it is parsing."); RETURN_FALSE; } if (zend_list_delete(parser->index) == FAILURE) { RETURN_FALSE; } RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_parser_set_option(resource parser, int option, mixed value) Set options in an XML parser */PHP_FUNCTION(xml_parser_set_option){ xml_parser *parser; zval **pind, **opt, **val; if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &pind, &opt, &val) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); convert_to_long_ex(opt); switch (Z_LVAL_PP(opt)) { case PHP_XML_OPTION_CASE_FOLDING: convert_to_long_ex(val); parser->case_folding = Z_LVAL_PP(val); break; case PHP_XML_OPTION_SKIP_TAGSTART: convert_to_long_ex(val); parser->toffset = Z_LVAL_PP(val); break; case PHP_XML_OPTION_SKIP_WHITE: convert_to_long_ex(val); parser->skipwhite = Z_LVAL_PP(val); break; case PHP_XML_OPTION_TARGET_ENCODING: { xml_encoding *enc; convert_to_string_ex(val); enc = xml_get_encoding(Z_STRVAL_PP(val)); if (enc == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported target encoding \"%s\"", Z_STRVAL_PP(val)); RETURN_FALSE; } parser->target_encoding = enc->name; break; } default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option"); RETURN_FALSE; break; } RETVAL_TRUE;}/* }}} *//* {{{ proto int xml_parser_get_option(resource parser, int option) Get options from an XML parser */PHP_FUNCTION(xml_parser_get_option){ xml_parser *parser; zval **pind, **opt; if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &pind, &opt) == FAILURE) { WRONG_PARAM_COUNT; } ZEND_FETCH_RESOURCE(parser,xml_parser *, pind, -1, "XML Parser", le_xml_parser); convert_to_long_ex(opt); switch (Z_LVAL_PP(opt)) { case PHP_XML_OPTION_CASE_FOLDING: RETURN_LONG(parser->case_folding); break; case PHP_XML_OPTION_TARGET_ENCODING: RETURN_STRING(parser->target_encoding, 1); break; default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown option"); RETURN_FALSE; break; } RETVAL_FALSE; /* never reached */}/* }}} *//* {{{ proto string utf8_encode(string data) Encodes an ISO-8859-1 string to UTF-8 */PHP_FUNCTION(utf8_encode){ zval **arg; XML_Char *encoded; int len; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(arg); encoded = xml_utf8_encode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1"); if (encoded == NULL) { RETURN_FALSE; } RETVAL_STRINGL(encoded, len, 0);}/* }}} *//* {{{ proto string utf8_decode(string data) Converts a UTF-8 encoded string to ISO-8859-1 */PHP_FUNCTION(utf8_decode){ zval **arg; XML_Char *decoded; int len; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(arg); decoded = xml_utf8_decode(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &len, "ISO-8859-1"); if (decoded == NULL) { RETURN_FALSE; } RETVAL_STRINGL(decoded, len, 0);}/* }}} */#endif/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -