请教用XMLHttp的get_responseXML如何能拿到IXMLDOMDocument2Ptr
请问用XMLHttp的get_responseXML怎么能拿到IXMLDOMDocument2Ptr
请问怎么用IXMLHTTPRequestPtr的get_responseXML获得IXMLDOMDocument2Ptr并把其中的XML文本内容显示出来?
我的代码如下:
IXMLHTTPRequestPtr xmlrequest;
LRESULT hr=xmlrequest.CreateInstance("Msxml2.XMLHTTP");
if(!SUCCEEDED(hr))
{
std::cout<<"无法创建XMLHTTP对象,请检查是否安装了MS XML运行库! "<<std::endl;
}
_variant_t varp(false);
xmlrequest->open(_bstr_t("POST"),_bstr_t
("http://192.168.1.81/Interface/CheckPrivilege.aspx"),varp); //varp参数表明方法是否异步
xmlrequest->send(_bstr_t
("<Level><LevelName>XXXX</LevelName><LevelPass>XXXXX</LevelPass></Level>"));
IXMLDOMDocument2Ptr pXMLDom;
hr=pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if(FAILED(hr))
{
std::cout<<"Failed to instantiate DOMDocument40 class!"<<std::endl;
return -1;
}
xmlrequest->get_responseXML((IDispatch**)&pXMLDom);
std::cout<<static_cast<char*>(pXMLDom->xml)<<std::endl;
这样做什么内容都显示不出来,
不过如果我加上
BSTR bstrbody;
xmlrequest->get_responseText(&bstrbody);
pXMLDom->loadXML(bstrbody);
的话就能正常显示其中内容了
求助!非得费这二遍事么?如何直接用get_responseXML获得IXMLDOMDocument2Ptr并将其中内容显示出来?
------解决方案--------------------
请问怎么用IXMLHTTPRequestPtr的get_responseXML获得IXMLDOMDocument2Ptr并把其中的XML文本内容显示出来?
我的代码如下:
IXMLHTTPRequestPtr xmlrequest;
LRESULT hr=xmlrequest.CreateInstance("Msxml2.XMLHTTP");
if(!SUCCEEDED(hr))
{
std::cout<<"无法创建XMLHTTP对象,请检查是否安装了MS XML运行库! "<<std::endl;
}
_variant_t varp(false);
xmlrequest->open(_bstr_t("POST"),_bstr_t
("http://192.168.1.81/Interface/CheckPrivilege.aspx"),varp); //varp参数表明方法是否异步
xmlrequest->send(_bstr_t
("<Level><LevelName>XXXX</LevelName><LevelPass>XXXXX</LevelPass></Level>"));
IXMLDOMDocument2Ptr pXMLDom;
hr=pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if(FAILED(hr))
{
std::cout<<"Failed to instantiate DOMDocument40 class!"<<std::endl;
return -1;
}
xmlrequest->get_responseXML((IDispatch**)&pXMLDom);
std::cout<<static_cast<char*>(pXMLDom->xml)<<std::endl;
这样做什么内容都显示不出来,
不过如果我加上
BSTR bstrbody;
xmlrequest->get_responseText(&bstrbody);
pXMLDom->loadXML(bstrbody);
的话就能正常显示其中内容了
求助!非得费这二遍事么?如何直接用get_responseXML获得IXMLDOMDocument2Ptr并将其中内容显示出来?
------解决方案--------------------
- C/C++ code
#include <stdio.h> #include <iostream.h> // If neccessary, change the file path if your msxml.dll file is // in a different location. #import "c:\windows\system32\msxml.dll" // To use MSXML 4.0, import the dll msxml4.dll instead of msxml.dll, as follows: // #import "c:\windows\system32\msxml4.dll" // using namespace MSXML2; using namespace MSXML; int main(int argc, char* argv[]) { CoInitialize(NULL); try { // Variables. bstr_t sUrl = "http://Server/public/TestFolder1/test.eml"; bstr_t sMethod = "PROPFIND"; _variant_t vUser = L"Domain\\Username"; _variant_t vPassword = L"!Password"; _variant_t vAsync = (bool)FALSE; bstr_t sReq; long lStatus; BSTR bstrResp; BSTR bstrResponseText; HRESULT hr; // If you are using MSXML 2.0, use the following to initialize pXMLHttpReq: MSXML::IXMLHttpRequestPtr pXMLHttpReq=NULL; // If you are using MSXML 4.0, use the following to initialize pXMLHttpReq: //MSXML2::IXMLHTTPRequestPtr pXMLHttpReq=NULL; // Initialize the XMLHTTPRequest object pointer. hr = pXMLHttpReq.CreateInstance(__uuidof(XMLHTTPRequest)); // Check the status of pointer creation. if (S_OK != hr) { cout<< "XML Http Request pointer creation failed. << endl; return 1; } // Open the XMLHTTPRequest object with the PROPFIND method and // specify that it will be sent asynchronously. pXMLHttpReq->open(sMethod, sUrl, vAsync, vUser, vPassword); // Set the Content-Type header to "text/xml". pXMLHttpReq->setRequestHeader((bstr_t)"Content-Type", (bstr_t)"text/xml"); // Build the request body and search for the display name of the // item. sReq = "<?xml version='1.0'?>"; sReq = sReq + "<d:propfind xmlns:d='DAV:'><d:prop>" + "<d:displayname/></d:prop></d:propfind>"; // Send the PROPFIND method request. pXMLHttpReq->send(sReq); // Get the method request status. pXMLHttpReq->get_status(&lStatus); // An error occurred on the server. if(lStatus >= 500) { pXMLHttpReq->get_statusText(&bstrResp); cout << "Status: " << lStatus << endl << "Status text: An error occurred on the server." << endl << (char*)(bstr_t)bstrResp << endl; } // The method request was successful. else if(lStatus == 207) { // Variables. MSXML::IXMLDOMDocumentPtr pDOMDoc = NULL; MSXML::IXMLDOMNodeListPtr pDOMNodeList = NULL; MSXML::IXMLDOMNodePtr pDOMNode = NULL; BSTR bstrText; // Create an instance of the DOM Document. HRESULT hr = pDOMDoc.CreateInstance(__uuidof(DOMDocument)); // Check the status of pointer creation. if(FAILED(hr)) cout<<"Creation of DOMDocument failed."<<endl; // Get the method response XML text. pXMLHttpReq->get_responseText(&bstrText); // Load the XML document with the response text. pDOMDoc->loadXML(bstrText); // Build a list of the DAV:displayname XML nodes (there should // be only one) corresponding to the folders returned in the // search request. The DAV: namespace is typically assigned // the a: prefix in the XML response body. pDOMNodeList = pDOMDoc->getElementsByTagName((bstr_t)"a:displayname"); // Display the display name of the resource. pDOMNode = pDOMNodeList->nextNode(); cout << pDOMNode->text << endl; } else { // Display the response status. cout << "Status: " << lStatus << endl; // Display the response status text. pXMLHttpReq->get_statusText(&bstrResp); cout << "Status text: " << (char*)(bstr_t)bstrResp << endl; // Display the response text. pXMLHttpReq->get_responseText(&bstrResponseText); cout << "Response text: " << (char*)(bstr_t)bstrResponseText << endl; } } catch(_com_error &e) { // Display the error information. cout << "Error code: " << (char*)e.Error() << endl << "Error message: " << (char*)e.ErrorMessage() <<endl; return 1; } CoUninitialize(); return 0; }