summaryrefslogtreecommitdiff
path: root/ext/domxml/php_domxml.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/domxml/php_domxml.c')
-rw-r--r--ext/domxml/php_domxml.c1388
1 files changed, 0 insertions, 1388 deletions
diff --git a/ext/domxml/php_domxml.c b/ext/domxml/php_domxml.c
deleted file mode 100644
index 7ddd1e1c63..0000000000
--- a/ext/domxml/php_domxml.c
+++ /dev/null
@@ -1,1388 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Uwe Steinmann <steinm@php.net> |
- +----------------------------------------------------------------------+
- */
-
-/* $Id$ */
-
-
-#include "php.h"
-#include "php_domxml.h"
-
-#if HAVE_DOMXML
-#include "ext/standard/info.h"
-/*#define newcode*/
-
-static int le_domxmldocp;
-static int le_domxmldtdp;
-static int le_domxmlnodep;
-static int le_domxmlattrp;
-static int le_domxmlnsp;
-static zend_class_entry *domxmldoc_class_entry_ptr;
-static zend_class_entry *domxmldtd_class_entry_ptr;
-static zend_class_entry *domxmlnode_class_entry_ptr;
-static zend_class_entry *domxmlattr_class_entry_ptr;
-static zend_class_entry *domxmlns_class_entry_ptr;
-static zend_class_entry *domxmltestnode_class_entry_ptr;
-
-static int node_attributes(zval **attributes, xmlNode *nodep);
-static int node_children(zval **children, xmlNode *nodep);
-
-static zend_function_entry domxml_functions[] = {
- PHP_FE(xmldoc, NULL)
- PHP_FE(xmldocfile, NULL)
- PHP_FE(xmltree, NULL)
- PHP_FE(domxml_root, NULL)
- PHP_FE(domxml_add_root, NULL)
- PHP_FE(domxml_dumpmem, NULL)
- PHP_FE(domxml_attributes, NULL)
- PHP_FE(domxml_getattr, NULL)
- PHP_FE(domxml_setattr, NULL)
- PHP_FE(domxml_children, NULL)
- PHP_FE(domxml_new_child, NULL)
- PHP_FE(domxml_node, NULL)
- PHP_FE(domxml_new_xmldoc, NULL)
- PHP_FALIAS(new_xmldoc, domxml_new_xmldoc, NULL)
- {NULL, NULL, NULL}
-};
-
-
-static zend_function_entry php_domxmldoc_class_functions[] = {
- PHP_FALIAS(root, domxml_root, NULL)
- PHP_FALIAS(children, domxml_children, NULL)
- PHP_FALIAS(add_root, domxml_add_root, NULL)
- PHP_FALIAS(dtd, domxml_intdtd, NULL)
- PHP_FALIAS(dumpmem, domxml_dumpmem, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmldtd_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlnode_class_functions[] = {
- PHP_FALIAS(lastchild, domxml_lastchild, NULL)
- PHP_FALIAS(children, domxml_children, NULL)
- PHP_FALIAS(parent, domxml_parent, NULL)
- PHP_FALIAS(new_child, domxml_new_child, NULL)
- PHP_FALIAS(getattr, domxml_getattr, NULL)
- PHP_FALIAS(setattr, domxml_setattr, NULL)
- PHP_FALIAS(attributes, domxml_attributes, NULL)
- PHP_FALIAS(node, domxml_node, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmltestnode_class_functions[] = {
- PHP_FE(domxml_test, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlattr_class_functions[] = {
- PHP_FALIAS(name, domxml_attrname, NULL)
- {NULL, NULL, NULL}
-};
-
-static zend_function_entry php_domxmlns_class_functions[] = {
- {NULL, NULL, NULL}
-};
-
-#ifdef newcode
-void domxmltestnode_class_startup();
-#endif
-
-zend_module_entry domxml_module_entry = {
- "domxml", domxml_functions, PHP_MINIT(domxml), NULL, NULL, NULL, PHP_MINFO(domxml), STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_DOMXML
-ZEND_GET_MODULE(domxml)
-#endif
-
-void _free_node(xmlNode *tmp) {
-/*fprintf(stderr, "Freeing node: %s\n", tmp->name);*/
-}
-
-PHP_MINIT_FUNCTION(domxml)
-{
- zend_class_entry domxmldoc_class_entry;
- zend_class_entry domxmldtd_class_entry;
- zend_class_entry domxmlnode_class_entry;
- zend_class_entry domxmlattr_class_entry;
- zend_class_entry domxmlns_class_entry;
-
-#ifdef newcode
- domxmltestnode_class_startup();
-#endif
-
- le_domxmldocp = register_list_destructors(xmlFreeDoc, NULL);
- /* Freeing the document contains freeing the complete tree.
- Therefore nodes, attributes etc. may not be freed seperately.
- */
- le_domxmlnodep = register_list_destructors(_free_node, NULL);
- le_domxmlattrp = register_list_destructors(NULL, NULL);
-/* le_domxmlnsp = register_list_destructors(NULL, NULL); */
-
- INIT_CLASS_ENTRY(domxmldoc_class_entry, "DomDocument", php_domxmldoc_class_functions);
- INIT_CLASS_ENTRY(domxmldtd_class_entry, "Dtd", php_domxmldtd_class_functions);
- INIT_CLASS_ENTRY(domxmlnode_class_entry, "DomNode", php_domxmlnode_class_functions);
- INIT_CLASS_ENTRY(domxmlattr_class_entry, "DomAttribute", php_domxmlattr_class_functions);
- INIT_CLASS_ENTRY(domxmlns_class_entry, "DomNamespace", php_domxmlns_class_functions);
-
- domxmldoc_class_entry_ptr = zend_register_internal_class(&domxmldoc_class_entry);
- domxmldtd_class_entry_ptr = zend_register_internal_class(&domxmldtd_class_entry);
- domxmlnode_class_entry_ptr = zend_register_internal_class(&domxmlnode_class_entry);
- domxmlattr_class_entry_ptr = zend_register_internal_class(&domxmlattr_class_entry);
- domxmlns_class_entry_ptr = zend_register_internal_class(&domxmlns_class_entry);
-
- 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_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT);
- return SUCCESS;
-}
-
-#ifdef newcode
-/* {{{ Node Class */
-pval domxmltestnode_class_get_property(zend_property_reference *property_reference)
-{
- pval result;
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
-
- printf("Reading a property from a OverloadedTestClass object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (overloaded_property->type) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (overloaded_property->element.type) {
- case IS_LONG:
- printf("%ld (numeric)\n", overloaded_property->element.value.lval);
- break;
- case IS_STRING:
- printf("'%s'\n", overloaded_property->element.value.str.val);
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- result.value.str.val = estrndup("testing", 7);
- result.value.str.len = 7;
- result.type = IS_STRING;
- return result;
-}
-
-
-int domxmltestnode_class_set_property(zend_property_reference *property_reference, pval *value)
-{
- zend_overloaded_element *overloaded_property;
- zend_llist_element *element;
-
- printf("Writing to a property from a OverloadedTestClass object:\n");
- printf("Writing '");
- zend_print_variable(value);
- printf("'\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (overloaded_property->type) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- }
- switch (overloaded_property->element.type) {
- case IS_LONG:
- printf("%ld (numeric)\n", overloaded_property->element.value.lval);
- break;
- case IS_STRING:
- printf("'%s'\n", overloaded_property->element.value.str.val);
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- return 0;
-}
-
-void domxmltestnode_class_call_function(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
-{
- zend_overloaded_element *overloaded_property;
- pval *object = property_reference->object;
- zend_llist_element *element;
-
-
- printf("Invoking a method on OverloadedTestClass object:\n");
-
- for (element=property_reference->elements_list->head; element; element=element->next) {
- overloaded_property = (zend_overloaded_element *) element->data;
- switch (overloaded_property->type) {
- case OE_IS_ARRAY:
- printf("Array offset: ");
- break;
- case OE_IS_OBJECT:
- printf("Object property: ");
- break;
- case OE_IS_METHOD: {
- pval *object_handle;
- printf("Overloaded method: ");
- PHP_FN(xmltree)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (zend_is_true(return_value)) {
- var_reset(object);
- return;
- }
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&overloaded_property->element);
- }
- }
- switch (overloaded_property->element.type) {
- case IS_LONG:
- printf("%ld (numeric)\n", overloaded_property->element.value.lval);
- break;
- case IS_STRING:
- printf("'%s'\n", overloaded_property->element.value.str.val);
- break;
- }
- pval_destructor(&overloaded_property->element);
- }
-
- printf("%d arguments\n", ZEND_NUM_ARGS());
- return_value->value.str.val = estrndup("testing", 7);
- return_value->value.str.len = 7;
- return_value->type = IS_STRING;
-}
-
-
-void domxmltestnode_class_startup()
-{
- zend_class_entry domxmltestnode_class_entry;
-
- INIT_OVERLOADED_CLASS_ENTRY(domxmltestnode_class_entry, "TestNode",
- php_domxmltestnode_class_functions,
- domxmltestnode_class_call_function,
- domxmltestnode_class_get_property,
- domxmltestnode_class_set_property);
-
- domxmltestnode_class_entry_ptr = zend_register_internal_class(&domxmltestnode_class_entry);
-}
-#endif
-
-/* {{{ proto string 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(id->value.lval);
-}
-/* }}} */
-
-/* }}} */
-
-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 Support", "enabled");
-/* php_info_print_table_row(2, "libmxl Version", LIBXML_VERSION ); */
- php_info_print_table_end();
-}
-
-/* {{{ proto string domxml_attrname([int dir_handle])
- Returns list of attribute objects */
-PHP_FUNCTION(domxml_attrname)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlNode *nodep;
- xmlAttr *attr;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- attr = nodep->properties;
- if (!attr) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(attr) {
- zval *pattr;
- ret = zend_list_insert(attr, le_domxmlattrp);
-
- /* construct an object with some methods */
- object_init_ex(pattr, domxmlattr_class_entry_ptr);
- add_property_resource(pattr, "attribute", ret);
- add_property_stringl(pattr, "name", (char *) attr->name, strlen(attr->name), 1);
-/* add_property_stringl(pattr, "content", (char *) attr->val->content, strlen(attr->val->content), 1); */
- zend_hash_next_index_insert(return_value->value.ht, &pattr, sizeof(zval *), NULL);
- attr = attr->next;
- }
-}
-/* }}} */
-
-/* {{{ proto class domxml_node(string name)
- Creates node */
-PHP_FUNCTION(domxml_node)
-{
- zval *arg;
- xmlNode *node;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- node = xmlNewNode(NULL, arg->value.str.val);
- if (!node) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(node, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", node->type);
- add_property_stringl(return_value, "name", (char *) node->name, strlen(node->name), 1);
- if(node->content)
- add_property_stringl(return_value, "content", (char *) node->content, strlen(node->content), 1);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_lastchild([int node])
- Read directory entry from dir_handle */
-PHP_FUNCTION(domxml_lastchild)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlNode *nodep, *last;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- last = nodep->last;
- if (!last) {
- RETURN_FALSE;
- }
-
- ret = zend_list_insert(last, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", last->type);
- add_property_stringl(return_value, "name", (char *) last->name, strlen(last->name), 1);
- if(last->content)
- add_property_stringl(return_value, "content", (char *) last->content, strlen(last->content), 1);
-}
-/* }}} */
-
-/* {{{ proto string domxml_parent([int node])
- Returns parent of node */
-PHP_FUNCTION(domxml_parent)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlNode *nodep, *last;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- last = nodep->parent;
- if (!last) {
- RETURN_FALSE;
- }
-
- ret = zend_list_insert(last, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", last->type);
- add_property_stringl(return_value, "name", (char *) last->name, strlen(last->name), 1);
- if(last->content)
- add_property_stringl(return_value, "content", (char *) last->content, strlen(last->content), 1);
-}
-/* }}} */
-
-/* {{{ proto string domxml_children([int node])
- Returns list of children nodes */
-PHP_FUNCTION(domxml_children)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlNode *nodep, *last;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if ((zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) &&
- (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE)) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || (type != le_domxmlnodep && type != le_domxmldocp)) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- /* Even if the nodep is a XML_DOCUMENT_NODE the type is at the
- same position.
- */
- if(nodep->type == XML_DOCUMENT_NODE)
- last = ((xmlDoc *) nodep)->children;
- else
- last = nodep->children;
- if (!last) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(last) {
- zval *child;
- MAKE_STD_ZVAL(child);
-
- ret = zend_list_insert(last, le_domxmlnodep);
-
- /* construct a node object */
- object_init_ex(child, domxmlnode_class_entry_ptr);
- add_property_stringl(child, "name", (char *) last->name, strlen(last->name), 1);
- if(last->content)
- add_property_stringl(child, "content", (char *) last->content, strlen(last->content), 1);
- add_property_resource(child, "node", ret);
- add_property_long(child, "type", last->type);
- zend_hash_next_index_insert(return_value->value.ht, &child, sizeof(zval *), NULL);
- last = last->next;
- }
-}
-/* }}} */
-
-/* {{{ proto string domxml_getattr([int node,] string attrname)
- Returns value of given attribute */
-PHP_FUNCTION(domxml_getattr)
-{
- zval *id, *arg1, **tmp;
- int id_to_find;
- xmlNode *nodep;
- char *value;
- int type;
-
- if ((ZEND_NUM_ARGS() == 1) && getParameters(ht, 1, &arg1) == SUCCESS) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- convert_to_string(arg1);
- } else if ((ZEND_NUM_ARGS() == 2) && getParameters(ht, 2, &id, &arg1) == SUCCESS) {
- convert_to_long(id);
- id_to_find = id->value.lval;
- convert_to_string(arg1);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- value = xmlGetProp(nodep, arg1->value.str.val);
- if (!value) {
- php_error(E_WARNING, "No such attribute '%s'", arg1->value.str.val);
- RETURN_FALSE;
- }
- RETURN_STRING(value, 1);
-}
-/* }}} */
-
-/* {{{ proto bool domxml_setattr([int node,] string attrname, string value)
- Sets value of given attribute */
-PHP_FUNCTION(domxml_setattr)
-{
- zval *id, *arg1, *arg2, **tmp;
- int id_to_find;
- xmlNode *nodep;
- xmlAttr *attr;
- int type;
-
- if ((ZEND_NUM_ARGS() == 2) && getParameters(ht, 2, &arg1, &arg2) == SUCCESS) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- convert_to_string(arg1);
- convert_to_string(arg2);
- } else if ((ZEND_NUM_ARGS() == 3) && getParameters(ht, 3, &id, &arg1, &arg2) == SUCCESS) {
- convert_to_long(id);
- id_to_find = id->value.lval;
- convert_to_string(arg1);
- convert_to_string(arg2);
- } else {
- WRONG_PARAM_COUNT;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- attr = xmlSetProp(nodep, arg1->value.str.val, arg2->value.str.val);
- if (!attr) {
- php_error(E_WARNING, "No such attribute '%s'", arg1->value.str.val);
- RETURN_FALSE;
- }
- RETURN_TRUE;
-}
-/* }}} */
-
-/* {{{ proto array domxml_attributes([int node])
- Returns list of attributes of node */
-PHP_FUNCTION(domxml_attributes)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlNode *nodep;
- xmlAttr *attr;
- int type;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my node (%d)", id);
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find node identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- if(0 > node_attributes(&return_value, nodep))
- RETURN_FALSE;
-
-#ifdef oldstyle_for_libxml_1_8_7
- attr = nodep->properties;
- if (!attr) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(attr) {
-fprintf(stderr, "ATTRNAME = %s\n", attr->name);
- if(attr->children) {
- fprintf(stderr, "ATTRVALUE present\n");
- if(attr->children->content)
- fprintf(stderr, "ATTRVALUE = %s\n", attr->children->content);
- add_assoc_string(return_value, (char *) attr->name, attr->children->content, 1);
- }
- attr = attr->next;
- }
-#endif
-}
-/* }}} */
-
-/* {{{ proto string domxml_rootnew([int doc])
- Returns list of children nodes */
-PHP_FUNCTION(domxml_rootnew)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlDoc *nodep;
- xmlNode *last;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- nodep = (xmlDoc *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmldocp) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- last = nodep->children;
- if (!last) {
- RETURN_FALSE;
- }
-
- if (array_init(return_value) == FAILURE) {
- RETURN_FALSE;
- }
-
- while(last) {
- zval *child;
- MAKE_STD_ZVAL(child);
-
- ret = zend_list_insert(last, le_domxmlnodep);
-
- /* construct a node object */
- object_init_ex(child, domxmlnode_class_entry_ptr);
- add_property_stringl(child, "name", (char *) last->name, strlen(last->name), 1);
- if(last->content)
- add_property_stringl(child, "content", (char *) last->content, strlen(last->content), 1);
- add_property_resource(child, "node", ret);
- add_property_long(child, "type", last->type);
- zend_hash_next_index_insert(return_value->value.ht, &child, sizeof(zval *), NULL);
- last = last->next;
- }
-}
-/* }}} */
-
-/* {{{ proto string domxml_root([int doc_handle])
- Returns root node of document */
-PHP_FUNCTION(domxml_root)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlDoc *docp;
- xmlNode *node;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- docp = (xmlDoc *)zend_list_find(id_to_find, &type);
- if (!docp || type != le_domxmldocp) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- node = docp->children;
- if (!node) {
- RETURN_FALSE;
- }
-
- while(node) {
- if(node->type == XML_ELEMENT_NODE) {
- ret = zend_list_insert(node, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", node->type);
- add_property_stringl(return_value, "name", (char *) node->name, strlen(node->name), 1);
- if(node->content)
- add_property_stringl(return_value, "content", (char *) node->content, strlen(node->content), 1);
- zend_list_addref(ret);
- return;
- }
- node = node->next;
- }
-}
-/* }}} */
-
-/* {{{ proto string domxml_dtd([int doc_handle])
- Returns DTD of document */
-PHP_FUNCTION(domxml_intdtd)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlDoc *docp;
- xmlDtd *dtd;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- docp = (xmlDoc *)zend_list_find(id_to_find, &type);
- if (!docp || type != le_domxmldocp) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- dtd = docp->intSubset;
- if (!dtd) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(dtd, le_domxmldtdp);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmldtd_class_entry_ptr);
- add_property_resource(return_value, "dtd", ret);
- if(dtd->ExternalID)
- add_property_string(return_value, "extid", (char *) dtd->ExternalID, 1);
- add_property_string(return_value, "sysid", (char *) dtd->SystemID, 1);
- add_property_string(return_value, "name", (char *) dtd->name, 1);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_dumpmem([int doc_handle])
- Dumps document into string */
-PHP_FUNCTION(domxml_dumpmem)
-{
- zval *id, **tmp;
- int id_to_find;
- xmlDoc *docp;
-/* char *mem; */
- xmlChar *mem;
- int size;
- int type;
-
- if (ZEND_NUM_ARGS() == 0) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
-
- docp = (xmlDoc *)zend_list_find(id_to_find, &type);
- if (!docp || type != le_domxmldocp) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- xmlDocDumpMemory(docp, &mem, &size);
- if (!size) {
- RETURN_FALSE;
- }
- RETURN_STRINGL(mem, size, 1);
-}
-/* }}} */
-
-/* {{{ proto class xmldoc(string xmldoc)
- Creates DOM object of XML document */
-PHP_FUNCTION(xmldoc)
-{
- zval *arg;
- xmlDoc *docp;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- docp = xmlParseMemory(arg->value.str.val, arg->value.str.len);
- if (!docp) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(docp, le_domxmldocp);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmldoc_class_entry_ptr);
- add_property_resource(return_value, "doc", ret);
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
- if(docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- add_property_long(return_value, "type", docp->type);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto class xmldocfile(string filename)
- Creates DOM object of XML document in file*/
-PHP_FUNCTION(xmldocfile)
-{
- zval *arg;
- xmlDoc *docp;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- docp = xmlParseFile(arg->value.str.val);
- if (!docp) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(docp, le_domxmldocp);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmldoc_class_entry_ptr);
- add_property_resource(return_value, "doc", ret);
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
- if(docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_new_child([int node_handle,] string name, string content)
- Adds child node to parent node */
-PHP_FUNCTION(domxml_new_child)
-{
- zval *id, *name, *content, **tmp;
- int id_to_find;
- xmlNode *child, *nodep;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 2) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- if(getParameters(ht, 2, &name, &content) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 3) || getParameters(ht, 3, &id, &name, &content) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
- convert_to_string(name);
- convert_to_string(content);
-
- nodep = (xmlNode *)zend_list_find(id_to_find, &type);
- if (!nodep || type != le_domxmlnodep) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- if(content->value.str.len)
- child = xmlNewChild(nodep, NULL, name->value.str.val, content->value.str.val);
- else
- child = xmlNewChild(nodep, NULL, name->value.str.val, NULL);
- if (!child) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(child, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", child->type);
- add_property_stringl(return_value, "name", (char *) child->name, strlen(child->name), 1);
- if(content->value.str.val)
- add_property_stringl(return_value, "content", content->value.str.val, content->value.str.len, 1);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto string domxml_add_root([int doc_handle,] string name)
- Adds root node to document */
-PHP_FUNCTION(domxml_add_root)
-{
- zval *id, *name, **tmp;
- int id_to_find;
- xmlDoc *docp;
- xmlNode *node;
- int type;
- int ret;
-
- if (ZEND_NUM_ARGS() == 1) {
- id = getThis();
- if (id) {
- if (zend_hash_find(id->value.obj.properties, "doc", sizeof("doc"), (void **)&tmp) == FAILURE) {
- php_error(E_WARNING, "unable to find my handle property");
- RETURN_FALSE;
- }
- id_to_find = (*tmp)->value.lval;
- if (getParameters(ht, 1, &name) == FAILURE)
- WRONG_PARAM_COUNT;
- } else {
- RETURN_FALSE;
- }
- } else if ((ZEND_NUM_ARGS() != 2) || getParameters(ht, 2, &id, &name) == FAILURE) {
- WRONG_PARAM_COUNT;
- } else {
- convert_to_long(id);
- id_to_find = id->value.lval;
- }
- convert_to_string(name);
-
- docp = (xmlDoc *)zend_list_find(id_to_find, &type);
- if (!docp || type != le_domxmldocp) {
- php_error(E_WARNING, "unable to find identifier (%d)", id_to_find);
- RETURN_FALSE;
- }
-
- node = xmlNewDocNode(docp, NULL, name->value.str.val, NULL);
- if (!node) {
- RETURN_FALSE;
- }
- xmlDocSetRootElement(docp, node);
- ret = zend_list_insert(node, le_domxmlnodep);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmlnode_class_entry_ptr);
- add_property_resource(return_value, "node", ret);
- add_property_long(return_value, "type", node->type);
- add_property_stringl(return_value, "name", (char *) node->name, strlen(node->name), 1);
- if(node->content)
- add_property_stringl(return_value, "content", (char *) node->content, strlen(node->content), 1);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto class domxml_new_xmldoc(string version)
- Creates new xmldoc */
-PHP_FUNCTION(domxml_new_xmldoc)
-{
- zval *arg;
- xmlDoc *docp;
- int ret;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- docp = xmlNewDoc(arg->value.str.val);
- if (!docp) {
- RETURN_FALSE;
- }
- ret = zend_list_insert(docp, le_domxmldocp);
-
- /* construct an object with some methods */
- object_init_ex(return_value, domxmldoc_class_entry_ptr);
- add_property_resource(return_value, "doc", ret);
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
- if(docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- zend_list_addref(ret);
-}
-/* }}} */
-
-/* {{{ proto string node_namespace([int node])
- Returns list of namespaces */
-static int node_namespace(zval **attributes, xmlNode *nodep)
-{
- xmlNs *ns;
-
- /* Get the children of the current node */
- ns = nodep->ns;
- if (!ns) {
- return -1;
- }
-
- /* create an php array for the children */
- MAKE_STD_ZVAL(*attributes);
- if (array_init(*attributes) == FAILURE) {
- return -1;
- }
-
- while(ns) {
- zval *pattr;
- MAKE_STD_ZVAL(pattr);
-/* ret = zend_list_insert(attr, le_domxmlattrp); */
-
- /* construct an object with some methods */
- object_init_ex(pattr, domxmlns_class_entry_ptr);
-/* add_property_resource(pattr, "attribute", ret); */
- if(ns->href)
- add_property_stringl(pattr, "href", (char *) ns->href, strlen(ns->href), 1);
- if(ns->prefix)
- add_property_stringl(pattr, "prefix", (char *) ns->prefix, strlen(ns->prefix), 1);
- add_property_long(pattr, "type", ns->type);
- zend_hash_next_index_insert((*attributes)->value.ht, &pattr, sizeof(zval *), NULL);
- ns = ns->next;
- }
- return 0;
-}
-
-/* {{{ proto string node_attributes([int node])
- Returns list of children nodes */
-static int node_attributes(zval **attributes, xmlNode *nodep)
-{
- zval *children;
- xmlAttr *attr;
- int count = 0;
-
- /* Get the children of the current node */
- if(nodep->type != XML_ELEMENT_NODE)
- return -1;
- attr = nodep->properties;
- if (!attr) {
- return -1;
- }
-
- /* create an php array for the children */
-/* MAKE_STD_ZVAL(*attributes); *//* Don't do this if *attributes are the return_value */
- if (array_init(*attributes) == FAILURE) {
- return -1;
- }
-
- while(attr) {
- zval *pattr;
- int n;
- MAKE_STD_ZVAL(pattr);
-
- /* construct an object with some methods */
- object_init_ex(pattr, domxmlattr_class_entry_ptr);
- add_property_stringl(pattr, "name", (char *) attr->name, strlen(attr->name), 1);
- if(0 <= (n = node_children(&children, attr->children))) {
- zend_hash_update(pattr->value.obj.properties, "children", sizeof("children"), (void *) &children, sizeof(zval *), NULL);
- }
- zend_hash_next_index_insert((*attributes)->value.ht, &pattr, sizeof(zval *), NULL);
- attr = attr->next;
- count++;
- }
- return count;
-}
-
-/* {{{ proto string node_children([int node])
- Returns list of children nodes */
-static int node_children(zval **children, xmlNode *nodep)
-{
- zval *mchildren, *attributes, *namespace;
- xmlNode *last;
- int count = 0;
-
- /* Get the children of the current node */
- last = nodep;
- if (!last) {
- return -1;
- }
-
- /* create an php array for the children */
- MAKE_STD_ZVAL(*children);
- if (array_init(*children) == FAILURE) {
- return -1;
- }
-
- while(last) {
- zval *child;
-
- /* Each child is a node object */
- MAKE_STD_ZVAL(child);
-/* ret = zend_list_insert(last, le_domxmlnodep); */
-
- /* construct a node object for each child */
- object_init_ex(child, domxmlnode_class_entry_ptr);
-
- /* Add the node object to the array of children */
- zend_hash_next_index_insert((*children)->value.ht, &child, sizeof(zval *), NULL);
-
- /* Add name, content and type as properties */
- add_property_stringl(child, "name", (char *) last->name, strlen(last->name), 1);
- add_property_long(child, "type", last->type);
- if(last->content)
- add_property_stringl(child, "content", (char *) last->content, strlen(last->content), 1);
-/* add_property_resource(child, "node", ret); */
-
- /* Get the namespace of the current node and add it as a property */
-/* if(!node_namespace(&namespace, last))
- zend_hash_update(child->value.obj.properties, "namespace", sizeof("namespace"), (void *) &namespace, sizeof(zval *), NULL);
-*/
-
- /* Get the attributes of the current node and add it as a property */
- MAKE_STD_ZVAL(attributes); /* Because it was taken out of node_attributes() */
- if(0 <= node_attributes(&attributes, last))
- zend_hash_update(child->value.obj.properties, "attributes", sizeof("attributes"), (void *) &attributes, sizeof(zval *), NULL);
-
- /* Get recursively the children of the current node and add it as a property */
- if(0 <= node_children(&mchildren, last->children))
- zend_hash_update(child->value.obj.properties, "children", sizeof("children"), (void *) &mchildren, sizeof(zval *), NULL);
-
- last = last->next;
- count++;
- }
- return count;
-}
-/* }}} */
-
-/* {{{ proto class xmltree(string xmldoc)
- Create a tree of PHP objects from an XML document */
-PHP_FUNCTION(xmltree)
-{
- zval *arg;
- zval *proot, *children, *attributes;
- xmlDoc *docp;
- xmlNode *root;
-
- if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
- convert_to_string(arg);
-
- /* Create a new xml document */
- docp = xmlParseMemory(arg->value.str.val, arg->value.str.len);
- if (!docp) {
- RETURN_FALSE;
- }
-
- /* construct the document is a php object for return */
- object_init_ex(return_value, domxmldoc_class_entry_ptr);
- add_property_stringl(return_value, "version", (char *) docp->version, strlen(docp->version), 1);
- if(docp->encoding)
- add_property_stringl(return_value, "encoding", (char *) docp->encoding, strlen(docp->encoding), 1);
- add_property_long(return_value, "standalone", docp->standalone);
- add_property_long(return_value, "type", docp->type);
-
- /* get the root and add as a property to the document */
- root = docp->children;
- if (!root) {
- xmlFreeDoc(docp);
- RETURN_FALSE;
- }
-
-#ifdef newcode
- {
- zval *child;
- MAKE_STD_ZVAL(child);
- object_init_ex(child, domxmltestnode_class_entry_ptr);
- zend_hash_update(return_value->value.obj.properties, "testnode", sizeof("testnode"), &child, sizeof(zval *), NULL);
- add_property_stringl(child, "name", "Testname", sizeof("Testname"), 1);
- }
-#endif
-
- /* The root itself maybe an array. Though you may not have two Elements
- as root, you may have a comment, pi and and element as root.
- Thanks to Paul DuBois for pointing me at this.
- */
- if(0 <= node_children(&children, root)) {
- int i, count;
- HashTable *lht;
- zend_hash_update(return_value->value.obj.properties, "children", sizeof("children"), (void *) &children, sizeof(zval *), NULL);
-
- /* Find the child of xml type element */
- lht = children->value.ht;
- count = zend_hash_num_elements(lht);
- zend_hash_internal_pointer_reset(lht);
- for(i=0; i<count; i++) {
- zval **prop, **keydata;
- zend_hash_get_current_data(lht, (void **) &keydata);
- if((*keydata)->type == IS_OBJECT) {
- if (zend_hash_find((*keydata)->value.obj.properties, "type", sizeof("type"), (void **)&prop) == SUCCESS) {
- if((*prop)->value.lval == XML_ELEMENT_NODE) {
- zend_hash_update(return_value->value.obj.properties, "root", sizeof("root"), (void **) keydata, sizeof(zval *), NULL);
- (*keydata)->is_ref = 1;
- (*keydata)->refcount++;
- }
- }
- }
- zend_hash_move_forward(lht);
- }
- }
- xmlFreeDoc(docp);
-}
-/* }}} */
-
-#endif /* HAVE_DOMXML */
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */