📄 php_domxml.c
字号:
/* Not yet initialized le_*s */ le_domxmlnotationp = -10003;#if defined(LIBXML_XPATH_ENABLED) le_xpathctxp = zend_register_list_destructors_ex(php_free_xpath_context, NULL, "xpathcontext", module_number); le_xpathobjectp = zend_register_list_destructors_ex(NULL, NULL, "xpathobject", module_number);#endif/* le_domxmlnsp = register_list_destructors(NULL, NULL); */#if HAVE_DOMXSLT le_domxsltstylesheetp = zend_register_list_destructors_ex(php_free_xslt_stylesheet, NULL, "xsltstylesheet", module_number);#endif INIT_OVERLOADED_CLASS_ENTRY(ce, "domnode", php_domxmlnode_class_functions, NULL, NULL, NULL); domxmlnode_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domdocument", php_domxmldoc_class_functions, NULL, NULL, NULL); domxmldoc_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domparser", php_domxmlparser_class_functions, NULL, NULL, NULL); domxmlparser_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domdocumenttype", php_domxmldoctype_class_functions, NULL, NULL, NULL); domxmldoctype_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "dtd", php_domxmldtd_class_functions, NULL, NULL, NULL); domxmldtd_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domelement", php_domxmlelement_class_functions, NULL, NULL, NULL); domxmlelement_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domattribute", php_domxmlattr_class_functions, NULL, NULL, NULL); domxmlattr_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domcdata", php_domxmlcdata_class_functions, NULL, NULL, NULL); domxmlcdata_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domtext", php_domxmltext_class_functions, NULL, NULL, NULL); domxmltext_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domcomment", php_domxmlcomment_class_functions, NULL, NULL, NULL); domxmlcomment_class_entry = zend_register_internal_class_ex(&ce, domxmlcdata_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domprocessinginstruction", php_domxmlpi_class_functions, NULL, NULL, NULL); domxmlpi_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domnotation", php_domxmlnotation_class_functions, NULL, NULL, NULL); domxmlnotation_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domentity", php_domxmlentity_class_functions, NULL, NULL, NULL); domxmlentity_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domentityreference", php_domxmlentityref_class_functions, NULL, NULL, NULL); domxmlentityref_class_entry = zend_register_internal_class_ex(&ce, domxmlnode_class_entry, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "domnamespace", php_domxmlns_class_functions, NULL, NULL, NULL); domxmlns_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);#if defined(LIBXML_XPATH_ENABLED) INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathContext", php_xpathctx_class_functions, NULL, NULL, NULL); xpathctx_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); INIT_OVERLOADED_CLASS_ENTRY(ce, "XPathObject", php_xpathobject_class_functions, NULL, NULL, NULL); xpathobject_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);#endif#if HAVE_DOMXSLT INIT_OVERLOADED_CLASS_ENTRY(ce, "XsltStylesheet", php_domxsltstylesheet_class_functions, NULL, NULL, NULL); domxsltstylesheet_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);#endif REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NODE", XML_ATTRIBUTE_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_TEXT_NODE", XML_TEXT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_CDATA_SECTION_NODE", XML_CDATA_SECTION_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_REF_NODE", XML_ENTITY_REF_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_NODE", XML_ENTITY_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_PI_NODE", XML_PI_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_COMMENT_NODE", XML_COMMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_NODE", XML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_TYPE_NODE", XML_DOCUMENT_TYPE_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DOCUMENT_FRAG_NODE", XML_DOCUMENT_FRAG_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_NOTATION_NODE", XML_NOTATION_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_HTML_DOCUMENT_NODE", XML_HTML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_DTD_NODE", XML_DTD_NODE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ELEMENT_DECL_NODE", XML_ELEMENT_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_DECL_NODE", XML_ATTRIBUTE_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ENTITY_DECL_NODE", XML_ENTITY_DECL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_NAMESPACE_DECL_NODE", XML_NAMESPACE_DECL, CONST_CS | CONST_PERSISTENT);#ifdef XML_GLOBAL_NAMESPACE REGISTER_LONG_CONSTANT("XML_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);#endif REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_CDATA", XML_ATTRIBUTE_CDATA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ID", XML_ATTRIBUTE_ID, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREF", XML_ATTRIBUTE_IDREF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREFS", XML_ATTRIBUTE_IDREFS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENTITY", XML_ATTRIBUTE_ENTITIES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKEN", XML_ATTRIBUTE_NMTOKEN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKENS", XML_ATTRIBUTE_NMTOKENS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENUMERATION", XML_ATTRIBUTE_ENUMERATION, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NOTATION", XML_ATTRIBUTE_NOTATION, CONST_CS | CONST_PERSISTENT);#if defined(LIBXML_XPATH_ENABLED) REGISTER_LONG_CONSTANT("XPATH_UNDEFINED", XPATH_UNDEFINED, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_NODESET", XPATH_NODESET, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_BOOLEAN", XPATH_BOOLEAN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_NUMBER", XPATH_NUMBER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_STRING", XPATH_STRING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_POINT", XPATH_POINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_RANGE", XPATH_RANGE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_LOCATIONSET", XPATH_LOCATIONSET, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("XPATH_USERS", XPATH_USERS, CONST_CS | CONST_PERSISTENT);#endif REGISTER_LONG_CONSTANT("DOMXML_LOAD_PARSING", DOMXML_LOAD_PARSING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_VALIDATING", DOMXML_LOAD_VALIDATING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_RECOVERING", DOMXML_LOAD_RECOVERING, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_SUBSTITUTE_ENTITIES", DOMXML_LOAD_SUBSTITUTE_ENTITIES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_COMPLETE_ATTRS",DOMXML_LOAD_COMPLETE_ATTRS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DOMXML_LOAD_DONT_KEEP_BLANKS",DOMXML_LOAD_DONT_KEEP_BLANKS, CONST_CS | CONST_PERSISTENT);#if HAVE_DOMXSLT && HAVE_DOMEXSLT exsltRegisterAll();#endif xmlInitParser(); return SUCCESS;}/* }}} *//* {{{ proto int domxml_test(int id) Unity function for testing */PHP_FUNCTION(domxml_test){ zval *id; if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) WRONG_PARAM_COUNT; convert_to_long(id); RETURN_LONG(Z_LVAL_P(id));}/* }}} *//* {{{ PHP_MINFO_FUNCTION(domxml) */PHP_MINFO_FUNCTION(domxml){ /* don't know why that line was commented out in the previous version, so i left it (cmv) */ php_info_print_table_start(); php_info_print_table_row(2, "DOM/XML", "enabled"); php_info_print_table_row(2, "DOM/XML API Version", DOMXML_API_VERSION);/* php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION); */ php_info_print_table_row(2, "libxml Version", xmlParserVersion);#if defined(LIBXML_HTML_ENABLED) php_info_print_table_row(2, "HTML Support", "enabled");#endif#if defined(LIBXML_XPATH_ENABLED) php_info_print_table_row(2, "XPath Support", "enabled");#endif#if defined(LIBXML_XPTR_ENABLED) php_info_print_table_row(2, "XPointer Support", "enabled");#endif#if HAVE_DOMXSLT { char buffer[128]; int major, minor, subminor; php_info_print_table_row(2, "DOM/XSLT", "enabled");/* php_info_print_table_row(2, "libxslt Version", LIBXSLT_DOTTED_VERSION); */ major = xsltLibxsltVersion/10000; minor = (xsltLibxsltVersion - major * 10000) / 100; subminor = (xsltLibxsltVersion - major * 10000 - minor * 100); snprintf(buffer, 128, "%d.%d.%d", major, minor, subminor); php_info_print_table_row(2, "libxslt Version", buffer); major = xsltLibxmlVersion/10000; minor = (xsltLibxmlVersion - major * 10000) / 100; subminor = (xsltLibxmlVersion - major * 10000 - minor * 100); snprintf(buffer, 128, "%d.%d.%d", major, minor, subminor); php_info_print_table_row(2, "libxslt compiled against libxml Version", buffer); }#if HAVE_DOMEXSLT php_info_print_table_row(2, "DOM/EXSLT", "enabled"); php_info_print_table_row(2, "libexslt Version", LIBEXSLT_DOTTED_VERSION);#endif#endif php_info_print_table_end();}/* }}} *//* {{{ Methods of Class DomAttribute *//* {{{ proto array domxml_attr_name(void) Returns list of attribute names Notice: domxml_node_name() does exactly the same for attribute-nodes, is this function here still needed, or would an alias be enough? */PHP_FUNCTION(domxml_attr_name){ zval *id; xmlAttrPtr attrp; DOMXML_GET_THIS_OBJ(attrp, id,le_domxmlattrp); DOMXML_NO_ARGS(); RETURN_STRING((char *) (attrp->name), 1);}/* }}} *//* {{{ proto array domxml_attr_value(void) Returns list of attribute names */PHP_FUNCTION(domxml_attr_value){ zval *id; xmlAttrPtr attrp; xmlChar *content; DOMXML_GET_THIS_OBJ(attrp, id, le_domxmlattrp); DOMXML_NO_ARGS(); /* RETURN_STRING((char *) xmlNodeGetContent((xmlNodePtr) attrp), 1); */ if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) { RETVAL_STRING(content,1); } else { RETURN_EMPTY_STRING(); } xmlFree(content);}/* }}} *//* {{{ proto bool domxml_attr_set_value(string content) Set value of attribute */PHP_FUNCTION(domxml_attr_set_value){ zval *id; xmlAttrPtr attrp; int content_len; char *content; DOMXML_PARAM_TWO(attrp, id, le_domxmlattrp, "s", &content, &content_len); /* If attribute has children unlink referenced nodes Spec indicates that content is to be overwritten and not appended xmlNodeSetContentLen will take care of removing and freeing the rest */ if (attrp->children) { node_list_unlink(((xmlNodePtr) attrp) ->children); } xmlNodeSetContentLen((xmlNodePtr) attrp, content, content_len); RETURN_TRUE;}/* }}} *//* {{{ proto array domxml_attr_specified(void) Returns list of attribute names */PHP_FUNCTION(domxml_attr_specified){ zval *id; xmlAttrPtr attrp; DOMXML_NOT_IMPLEMENTED(); id = getThis(); attrp = php_dom_get_object(id, le_domxmlattrp, 0 TSRMLS_CC); RETURN_TRUE;}/* }}} *//* End of Methods DomAttr }}} *//* {{{ Methods of Class DomProcessingInstruction *//* {{{ proto array domxml_pi_target(void) Returns target of pi */PHP_FUNCTION(domxml_pi_target){ zval *id; xmlNodePtr nodep; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip); DOMXML_NO_ARGS(); RETURN_STRING((char *) nodep->name, 1);}/* }}} *//* {{{ proto array domxml_pi_data(void) Returns data of pi */PHP_FUNCTION(domxml_pi_data){ zval *id; xmlNodePtr nodep; xmlChar *content; DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlpip); DOMXML_NO_ARGS(); /* RETURN_STRING(xmlNodeGetContent(nodep), 1); */ if ((content = xmlNodeGetContent(nodep)) != NULL) { RETVAL_STRING(content,1); } else { RETURN_EMPTY_STRING(); } xmlFree(content);}/* }}} *//* End of Methods of DomProcessingInstruction }}} *//* {{{ Methods of Class DomCData *//* {{{ proto array domxml_cdata_length(void) Returns list of attribute names */PHP_FUNCTION(domxml_cdata_length){ zval *id; xmlNodePtr nodep; DOMXML_NOT_IMPLEMENTED(); id = getThis(); nodep = php_dom_get_object(id, le_domxmlcdatap, 0 TSRMLS_CC); RETURN_LONG(1);}/* }}} *//* End of Methods DomCDdata }}} *//* {{{ Methods of Class DomNode *//* {{{ proto object domxml_node(string name) Creates node */PHP_FUNCTION(domxml_node){ zval *rv = NULL; xmlNode *node; int ret, name_len; char *name; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { return; } node = xmlNewNode(NULL, name); if (!node) { RETURN_FALSE; } if(DOMXML_IS_TYPE(getThis(), domxmlnode_class_entry)) { DOMXML_DOMOBJ_NEW(getThis(), node, &ret); } else { DOMXML_RET_OBJ(rv, node, &ret); }}/* }}} *//* {{{ proto object domxml_node_name(void) Returns name of node */PHP_FUNCTION(domxml_node_name){ zval *id; xmlNode *n; int fullQName = 0; xmlChar *qname = NULL; const char *str = NULL; DOMXML_PARAM_ONE(n, id, le_domxmlnodep,"|b",&fullQName); switch (Z_TYPE_P(n)) { case XML_ELEMENT_NODE: if (fullQName && n->ns && n->ns->prefix) { qname = xmlStrdup(n->ns->prefix); qname = xmlStrcat(qname, ":"); qname = xmlStrcat(qname, n->name); str = qname; } else { str = n->name; } break; case XML_NAMESPACE_DECL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -