|
|
|
@ -98,6 +98,47 @@ int dom_nodelist_length_read(dom_object *obj, zval *retval TSRMLS_DC) |
|
|
|
|
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
xmlNodePtr dom_nodelist_xml_item(dom_nnodemap_object *objmap, long index) /* {{{ */ |
|
|
|
{ |
|
|
|
xmlNodePtr itemnode = NULL; |
|
|
|
|
|
|
|
if (objmap->nodetype == XML_ENTITY_NODE) { |
|
|
|
itemnode = php_dom_libxml_hash_iter(objmap->ht, index); |
|
|
|
} else { |
|
|
|
itemnode = php_dom_libxml_notation_iter(objmap->ht, index); |
|
|
|
} |
|
|
|
|
|
|
|
return itemnode; |
|
|
|
} /* }}} end dom_nodelist_xml_item */ |
|
|
|
|
|
|
|
xmlNodePtr dom_nodelist_baseobj_item(dom_nnodemap_object *objmap, long index) /* {{{ */ |
|
|
|
{ |
|
|
|
xmlNodePtr itemnode = NULL; |
|
|
|
xmlNodePtr nodep, curnode; |
|
|
|
int count = 0; |
|
|
|
|
|
|
|
nodep = dom_object_get_node(objmap->baseobj); |
|
|
|
if (nodep) { |
|
|
|
if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) { |
|
|
|
curnode = nodep->children; |
|
|
|
while (count < index && curnode != NULL) { |
|
|
|
count++; |
|
|
|
curnode = curnode->next; |
|
|
|
} |
|
|
|
itemnode = curnode; |
|
|
|
} else { |
|
|
|
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { |
|
|
|
nodep = xmlDocGetRootElement((xmlDoc *) nodep); |
|
|
|
} else { |
|
|
|
nodep = nodep->children; |
|
|
|
} |
|
|
|
itemnode = dom_get_elements_by_tag_name_ns_raw(nodep, (char *) objmap->ns, (char *) objmap->local, &count, index); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return itemnode; |
|
|
|
} /* }}} end dom_nodelist_baseobj_item */ |
|
|
|
|
|
|
|
/* {{{ proto DOMNode dom_nodelist_item(int index); |
|
|
|
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 |
|
|
|
Since: |
|
|
|
@ -111,8 +152,6 @@ PHP_FUNCTION(dom_nodelist_item) |
|
|
|
xmlNodePtr itemnode = NULL; |
|
|
|
|
|
|
|
dom_nnodemap_object *objmap; |
|
|
|
xmlNodePtr nodep, curnode; |
|
|
|
int count = 0; |
|
|
|
|
|
|
|
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_nodelist_class_entry, &index) == FAILURE) { |
|
|
|
return; |
|
|
|
@ -124,11 +163,7 @@ PHP_FUNCTION(dom_nodelist_item) |
|
|
|
objmap = (dom_nnodemap_object *)intern->ptr; |
|
|
|
if (objmap != NULL) { |
|
|
|
if (objmap->ht) { |
|
|
|
if (objmap->nodetype == XML_ENTITY_NODE) { |
|
|
|
itemnode = php_dom_libxml_hash_iter(objmap->ht, index); |
|
|
|
} else { |
|
|
|
itemnode = php_dom_libxml_notation_iter(objmap->ht, index); |
|
|
|
} |
|
|
|
itemnode = dom_nodelist_xml_item(objmap, index); |
|
|
|
} else { |
|
|
|
if (objmap->nodetype == DOM_NODESET) { |
|
|
|
HashTable *nodeht = HASH_OF(&objmap->baseobj_zv); |
|
|
|
@ -138,25 +173,7 @@ PHP_FUNCTION(dom_nodelist_item) |
|
|
|
return; |
|
|
|
} |
|
|
|
} else if (objmap->baseobj) { |
|
|
|
nodep = dom_object_get_node(objmap->baseobj); |
|
|
|
if (nodep) { |
|
|
|
if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) { |
|
|
|
curnode = nodep->children; |
|
|
|
while (count < index && curnode != NULL) { |
|
|
|
count++; |
|
|
|
curnode = curnode->next; |
|
|
|
} |
|
|
|
itemnode = curnode; |
|
|
|
} else { |
|
|
|
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { |
|
|
|
nodep = xmlDocGetRootElement((xmlDoc *) nodep); |
|
|
|
} else { |
|
|
|
nodep = nodep->children; |
|
|
|
} |
|
|
|
itemnode = dom_get_elements_by_tag_name_ns_raw( |
|
|
|
nodep, (char *) objmap->ns, (char *) objmap->local, &count, index); |
|
|
|
} |
|
|
|
} |
|
|
|
itemnode = dom_nodelist_baseobj_item(objmap, index); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|