[PATCH] Use xmlNodeBufGetContent to get text data

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Thu Dec 18 04:21:42 CST 2008


---
 dlls/msxml3/node.c |   32 ++++++++++++--------------------
 1 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 3169f35..a1dffbb 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -864,32 +864,24 @@ static HRESULT WINAPI xmlnode_get_text(
 {
     xmlnode *This = impl_from_IXMLDOMNode( iface );
     BSTR str = NULL;
+    xmlBufferPtr pXmlBuf;
+    int success;
 
-    TRACE("%p\n", This);
+    TRACE("%p type %d\n", This, This->node->type);
 
     if ( !text )
         return E_INVALIDARG;
 
-    switch(This->node->type)
-    {
-    case XML_ELEMENT_NODE:
-    case XML_ATTRIBUTE_NODE:
+    pXmlBuf = xmlBufferCreate();
+    if(pXmlBuf)
     {
-        xmlNodePtr child = This->node->children;
-        if ( child && child->type == XML_TEXT_NODE )
-            str = bstr_from_xmlChar( child->content );
-        break;
-    }
-
-    case XML_TEXT_NODE:
-    case XML_CDATA_SECTION_NODE:
-    case XML_PI_NODE:
-    case XML_COMMENT_NODE:
-        str = bstr_from_xmlChar( This->node->content );
-        break;
-
-    default:
-        FIXME("Unhandled node type %d\n", This->node->type);
+        success = xmlNodeBufGetContent(pXmlBuf, (xmlNodePtr)This->node);
+        if(success == 0)
+        {
+            const xmlChar *pContent = xmlBufferContent(pXmlBuf);
+            str = bstr_from_xmlChar(pContent);
+        }
+        xmlBufferFree(pXmlBuf);
     }
 
     /* Always return a string. */
-- 
1.5.4.3


--------------070502020309040909040600--



More information about the wine-patches mailing list