Nikolay Sivov : msxml3: Implement ::get_responseXML().

Alexandre Julliard julliard at winehq.org
Mon Oct 11 13:15:17 CDT 2010


Module: wine
Branch: master
Commit: 45db1d137670c88b712ad96c1ef639a830713871
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=45db1d137670c88b712ad96c1ef639a830713871

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat Oct  9 01:42:44 2010 +0400

msxml3: Implement ::get_responseXML().

---

 dlls/msxml3/httprequest.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c
index 3c2c049..504da92 100644
--- a/dlls/msxml3/httprequest.c
+++ b/dlls/msxml3/httprequest.c
@@ -766,13 +766,34 @@ static HRESULT WINAPI httprequest_get_statusText(IXMLHTTPRequest *iface, BSTR *p
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI httprequest_get_responseXML(IXMLHTTPRequest *iface, IDispatch **ppBody)
+static HRESULT WINAPI httprequest_get_responseXML(IXMLHTTPRequest *iface, IDispatch **body)
 {
     httprequest *This = impl_from_IXMLHTTPRequest( iface );
+    IXMLDOMDocument3 *doc;
+    HRESULT hr;
+    BSTR str;
 
-    FIXME("stub %p %p\n", This, ppBody);
+    TRACE("(%p)->(%p)\n", This, body);
 
-    return E_NOTIMPL;
+    if (!body) return E_INVALIDARG;
+    if (This->state != READYSTATE_COMPLETE) return E_FAIL;
+
+    hr = DOMDocument_create(&CLSID_DOMDocument, NULL, (void**)&doc);
+    if (hr != S_OK) return hr;
+
+    hr = IXMLHTTPRequest_get_responseText(iface, &str);
+    if (hr == S_OK)
+    {
+        VARIANT_BOOL ok;
+
+        hr = IXMLDOMDocument3_loadXML(doc, str, &ok);
+        SysFreeString(str);
+    }
+
+    IXMLDOMDocument3_QueryInterface(doc, &IID_IDispatch, (void**)body);
+    IXMLDOMDocument3_Release(doc);
+
+    return hr;
 }
 
 static HRESULT WINAPI httprequest_get_responseText(IXMLHTTPRequest *iface, BSTR *body)




More information about the wine-cvs mailing list