static HRESULT WINAPI HTMLDOMNode_get_childNodes(IHTMLDOMNode *iface, IDispatch **p) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); nsIDOMNodeList *nslist; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsres = nsIDOMNode_GetChildNodes(This->nsnode, &nslist); if(NS_FAILED(nsres)) { ERR("GetChildNodes failed: %08x\n", nsres); return E_FAIL; } *p = (IDispatch*)create_child_collection(This->doc, nslist); nsIDOMNodeList_Release(nslist); return S_OK; }
static void create_all_list(HTMLDocumentNode *doc, HTMLDOMNode *elem, elem_vector_t *buf) { nsIDOMNodeList *nsnode_list; nsIDOMNode *iter; UINT32 list_len = 0, i; nsresult nsres; HRESULT hres; nsres = nsIDOMNode_GetChildNodes(elem->nsnode, &nsnode_list); if(NS_FAILED(nsres)) { ERR("GetChildNodes failed: %08x\n", nsres); return; } nsIDOMNodeList_GetLength(nsnode_list, &list_len); if(!list_len) return; for(i=0; i<list_len; i++) { nsres = nsIDOMNodeList_Item(nsnode_list, i, &iter); if(NS_FAILED(nsres)) { ERR("Item failed: %08x\n", nsres); continue; } if(is_elem_node(iter)) { HTMLDOMNode *node; hres = get_node(doc, iter, TRUE, &node); if(FAILED(hres)) { FIXME("get_node failed: %08x\n", hres); continue; } elem_vector_add(buf, elem_from_HTMLDOMNode(node)); create_all_list(doc, node, buf); } } }