msxml3: Don't use xmlnode's IXMLDOMNode iface in get_childNode implementations.
diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c
index aa0f2d0..9a0394d 100644
--- a/dlls/msxml3/attribute.c
+++ b/dlls/msxml3/attribute.c
@@ -238,7 +238,10 @@
     IXMLDOMNodeList** outList)
 {
     domattr *This = impl_from_IXMLDOMAttribute( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domattr_get_firstChild(
diff --git a/dlls/msxml3/cdata.c b/dlls/msxml3/cdata.c
index 56c2695..902fe26 100644
--- a/dlls/msxml3/cdata.c
+++ b/dlls/msxml3/cdata.c
@@ -249,7 +249,10 @@
     IXMLDOMNodeList** outList)
 {
     domcdata *This = impl_from_IXMLDOMCDATASection( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domcdata_get_firstChild(
diff --git a/dlls/msxml3/comment.c b/dlls/msxml3/comment.c
index 3a30d6c..8763864 100644
--- a/dlls/msxml3/comment.c
+++ b/dlls/msxml3/comment.c
@@ -242,7 +242,10 @@
     IXMLDOMNodeList** outList)
 {
     domcomment *This = impl_from_IXMLDOMComment( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domcomment_get_firstChild(
diff --git a/dlls/msxml3/docfrag.c b/dlls/msxml3/docfrag.c
index 5bc8e4b..ed8b6c5 100644
--- a/dlls/msxml3/docfrag.c
+++ b/dlls/msxml3/docfrag.c
@@ -244,7 +244,10 @@
     IXMLDOMNodeList** outList)
 {
     domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domfrag_get_firstChild(
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index f2a7ad6..f7400f4 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -752,7 +752,10 @@
     IXMLDOMNodeList** childList )
 {
     domdoc *This = impl_from_IXMLDOMDocument3( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), childList );
+
+    TRACE("(%p)->(%p)\n", This, childList);
+
+    return node_get_child_nodes(&This->node, childList);
 }
 
 
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 3d6228d..c7c8d45 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -253,7 +253,10 @@
     IXMLDOMNodeList** outList)
 {
     domelem *This = impl_from_IXMLDOMElement( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domelem_get_firstChild(
diff --git a/dlls/msxml3/entityref.c b/dlls/msxml3/entityref.c
index 9fb9ab3..3b8ae53 100644
--- a/dlls/msxml3/entityref.c
+++ b/dlls/msxml3/entityref.c
@@ -240,7 +240,10 @@
     IXMLDOMNodeList** outList)
 {
     entityref *This = impl_from_IXMLDOMEntityReference( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI entityref_get_firstChild(
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index f54e9ae..8964818 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -163,6 +163,8 @@
 extern HRESULT node_get_content(xmlnode*,VARIANT*);
 extern HRESULT node_put_value(xmlnode*,VARIANT*);
 extern HRESULT node_get_parent(xmlnode*,IXMLDOMNode**);
+extern HRESULT node_get_child_nodes(xmlnode*,IXMLDOMNodeList**);
+
 
 extern HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document);
 
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 7bcbe12..aa494c4 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -293,22 +293,24 @@
     return E_NOTIMPL;
 }
 
+HRESULT node_get_child_nodes(xmlnode *This, IXMLDOMNodeList **ret)
+{
+    if(!ret)
+        return E_INVALIDARG;
+
+    *ret = create_children_nodelist(This->node);
+    if(!*ret)
+        return E_OUTOFMEMORY;
+
+    return S_OK;
+}
+
 static HRESULT WINAPI xmlnode_get_childNodes(
     IXMLDOMNode *iface,
     IXMLDOMNodeList** childList)
 {
-    xmlnode *This = impl_from_IXMLDOMNode( iface );
-
-    TRACE("(%p)->(%p)\n", This, childList );
-
-    if ( !childList )
-        return E_INVALIDARG;
-
-    *childList = create_children_nodelist(This->node);
-    if (*childList == NULL)
-        return E_OUTOFMEMORY;
-
-    return S_OK;
+    ERR("Should not be called\n");
+    return E_NOTIMPL;
 }
 
 static HRESULT WINAPI xmlnode_get_firstChild(
@@ -1825,7 +1827,10 @@
     IXMLDOMNodeList** outList)
 {
     unknode *This = impl_from_unkIXMLDOMNode( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI unknode_get_firstChild(
diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c
index 95f3327..20e6bd6 100644
--- a/dlls/msxml3/pi.c
+++ b/dlls/msxml3/pi.c
@@ -255,7 +255,10 @@
     IXMLDOMNodeList** outList)
 {
     dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI dom_pi_get_firstChild(
diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c
index 48801d6..5891814c 100644
--- a/dlls/msxml3/text.c
+++ b/dlls/msxml3/text.c
@@ -255,7 +255,10 @@
     IXMLDOMNodeList** outList)
 {
     domtext *This = impl_from_IXMLDOMText( iface );
-    return IXMLDOMNode_get_childNodes( IXMLDOMNode_from_impl(&This->node), outList );
+
+    TRACE("(%p)->(%p)\n", This, outList);
+
+    return node_get_child_nodes(&This->node, outList);
 }
 
 static HRESULT WINAPI domtext_get_firstChild(