cvs: php-src /ext/simplexml simplexml.c /ext/simplexml/tests profile12.phpt

From: Date: Fri, 14 Apr 2006 14:07:51 +0000
Subject: cvs: php-src /ext/simplexml simplexml.c /ext/simplexml/tests profile12.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-37802@lists.php.net to get a copy of this message
helly Fri Apr 14 14:07:51 2006 UTC Added files: /php-src/ext/simplexml/tests profile12.phpt Modified files: /php-src/ext/simplexml simplexml.c Log: - Allow access to namespaced root by specifying prefix on creation - Fix access to non namespaced root http://cvs.php.net/viewcvs.cgi/php-src/ext/simplexml/simplexml.c?r1=1.204&r2=1.205&diff_format=u Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.204 php-src/ext/simplexml/simplexml.c:1.205 --- php-src/ext/simplexml/simplexml.c:1.204 Fri Apr 14 12:18:15 2006 +++ php-src/ext/simplexml/simplexml.c Fri Apr 14 14:07:51 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.204 2006/04/14 12:18:15 helly Exp $ */ +/* $Id: simplexml.c,v 1.205 2006/04/14 14:07:51 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -69,7 +69,7 @@ if (name) { subnode->iter.name = xmlStrdup(name); } - if (prefix) { + if (prefix && *prefix) { subnode->iter.nsprefix = xmlStrdup(prefix); } @@ -122,7 +122,7 @@ return 1; } - if (node->ns && !xmlStrcmp(node->ns->href, name)) { + if (node->ns && (/*!xmlStrcmp(node->ns->prefix, name) ||*/ !xmlStrcmp(node->ns->href, name))) { return 1; } @@ -1816,7 +1816,7 @@ } /* }}} */ -/* {{{ proto simplemxml_element simplexml_load_file(string filename [, string class_name [, int options]]) +/* {{{ proto simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns]]]) Load a filename and return a simplexml_element object to allow for processing */ PHP_FUNCTION(simplexml_load_file) { @@ -1824,12 +1824,12 @@ char *filename; int filename_len; xmlDocPtr docp; - char *classname = ""; - int classname_len = 0; + char *classname = NULL, *ns = NULL; + int classname_len = 0, ns_len = 0; long options = 0; zend_class_entry *ce= sxe_class_entry; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sl", &filename, &filename_len, &classname, &classname_len, &options) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sls", &filename, &filename_len, &classname, &classname_len, &options, &ns, &ns_len) == FAILURE) { return; } @@ -1848,6 +1848,7 @@ } sxe = php_sxe_object_new(ce TSRMLS_CC); + sxe->iter.nsprefix = ns_len ? xmlStrdup(ns) : NULL; php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC); php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC); @@ -1856,7 +1857,7 @@ } /* }}} */ -/* {{{ proto simplemxml_element simplexml_load_string(string data [, string class_name [, int options]]) +/* {{{ proto simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns]]]) Load a string and return a simplexml_element object to allow for processing */ PHP_FUNCTION(simplexml_load_string) { @@ -1864,12 +1865,12 @@ char *data; int data_len; xmlDocPtr docp; - char *classname = ""; - int classname_len = 0; + char *classname = NULL, *ns = NULL; + int classname_len = 0, ns_len = 0; long options = 0; zend_class_entry *ce= sxe_class_entry; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sl", &data, &data_len, &classname, &classname_len, &options) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sls", &data, &data_len, &classname, &classname_len, &options, &ns, &ns_len) == FAILURE) { return; } @@ -1888,6 +1889,7 @@ } sxe = php_sxe_object_new(ce TSRMLS_CC); + sxe->iter.nsprefix = ns_len ? xmlStrdup(ns) : NULL; php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC); php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC); @@ -1897,19 +1899,19 @@ /* }}} */ -/* {{{ proto SimpleXMLElement::__construct(string data [, int options [, bool data_is_url]]) +/* {{{ proto SimpleXMLElement::__construct(string data [, int options [, bool data_is_url [, string ns]]]) SimpleXMLElement constructor */ SXE_METHOD(__construct) { php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); - char *data; - int data_len; + char *data, *ns = NULL; + int data_len, *ns_len = 0; xmlDocPtr docp; long options = 0; zend_bool is_url = 0; php_set_error_handling(EH_THROW, zend_exception_get_default(TSRMLS_C) TSRMLS_CC); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lb", &data, &data_len, &options, &is_url) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lbs", &data, &data_len, &options, &is_url, &ns, &ns_len) == FAILURE) { php_std_error_handling(); return; } @@ -1924,6 +1926,7 @@ return; } + sxe->iter.nsprefix = ns_len ? xmlStrdup(ns) : NULL; php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp TSRMLS_CC); php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL TSRMLS_CC); } @@ -2264,7 +2267,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.204 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.205 $"); php_info_print_table_row(2, "Schema support", #ifdef LIBXML_SCHEMAS_ENABLED "enabled"); http://cvs.php.net/viewcvs.cgi/php-src/ext/simplexml/tests/profile12.phpt?view=markup&rev=1.1 Index: php-src/ext/simplexml/tests/profile12.phpt +++ php-src/ext/simplexml/tests/profile12.phpt --TEST-- SimpleXML [profile]: Accessing namespaced root and non namespaced children --FILE-- <?php $xml =<<<EOF <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <soap:Body> <businessList foo="bar"> <businessInfo businessKey="bla"/> </businessList> </soap:Body> </soap:Envelope> EOF; $sxe = simplexml_load_string($xml, NULL, 0, 'soap'); $nsl = $sxe->getNamespaces(); var_dump($nsl); $sxe = simplexml_load_string($xml, NULL, 0, $nsl['soap']); var_dump($sxe->Body); var_dump($sxe->Body->children('')); var_dump($sxe->Body->children('')->businessList); ?> ===DONE=== --EXPECTF-- array(1) { ["soap"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" } object(SimpleXMLElement)#%d (0) { } object(SimpleXMLElement)#%d (1) { ["businessInfo"]=> object(SimpleXMLElement)#%d (1) { ["@attributes"]=> array(1) { ["businessKey"]=> string(3) "bla" } } } object(SimpleXMLElement)#%d (2) { ["@attributes"]=> array(1) { ["foo"]=> string(3) "bar" } ["businessInfo"]=> object(SimpleXMLElement)#%d (1) { ["@attributes"]=> array(1) { ["businessKey"]=> string(3) "bla" } } } ===DONE=== --UEXPECTF-- array(1) { [u"soap"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" } object(SimpleXMLElement)#%d (0) { } object(SimpleXMLElement)#%d (1) { [u"businessInfo"]=> object(SimpleXMLElement)#%d (1) { [u"@attributes"]=> array(1) { [u"businessKey"]=> unicode(3) "bla" } } } object(SimpleXMLElement)#%d (2) { [u"@attributes"]=> array(1) { [u"foo"]=> unicode(3) "bar" } [u"businessInfo"]=> object(SimpleXMLElement)#%d (1) { [u"@attributes"]=> array(1) { [u"businessKey"]=> unicode(3) "bla" } } } ===DONE===

« previous php.cvs (#37802) next »