从Web站点读取xml的问题.

alickguo 2003-10-16 12:11:09
CoInitialize(NULL);

IXMLDOMDocumentPtr m_plDomDocument;
IXMLDOMElementPtr m_pDocRoot;
IXMLDOMNodePtr m_pDocNode;

HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument);

if (FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
}

// specify xml file name
CString strFileName ("http://youth.fzu.edu.cn/NetMsg/test.asp");

_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString();

variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName);
if (((bool)vResult) == TRUE) // 成功的
{
// now that the document is loaded, we need to initialize the root pointer
m_pDocRoot = m_plDomDocument->documentElement;
m_pDocNode = m_pDocRoot->selectSingleNode("//TestName");
AfxMessageBox(m_plDomDocument->xml);//出问题,空的
//AfxMessageBox(m_pDocNode->text);
}
else
{
AfxMessageBox("Document FAILED to load!");
}

test.asp是写成xml的.
就是:Response.content="text/xml"
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alickguo 2003-10-16
  • 打赏
  • 举报
回复
http://youth.fzu.edu.cn/NetMsg/test.asp
改成
http://youth.fzu.edu.cn/NetMsg/test.xml
也不行。
alickguo 2003-10-16
  • 打赏
  • 举报
回复
http://youth.fzu.edu.cn/NetMsg/test.asp改成
http://youth.fzu.edu.cn/NetMsg/test.xml也不行
--------------------
wuxfBrave 2003-10-16
  • 打赏
  • 举报
回复
上面的代码是我独取网络xml文件的代码
在局域网的web站点通过
wuxfBrave 2003-10-16
  • 打赏
  • 举报
回复
// URLBindStatusCallback.cpp: implementation of the CURLBindStatusCallback class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "URLBindStatusCallback.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

STDMETHODIMP CURLBindStatusCallback::QueryInterface(REFIID riid, LPVOID * ppvObj)
{
if (IsEqualIID(riid, IID_IBindStatusCallback) || IsEqualIID(riid, IID_IUnknown))
{
*ppvObj = (IBindStatusCallback *)this;
}
else if (IsEqualIID(riid, IID_IAuthenticate))
{
*ppvObj = (IAuthenticate *)this;
}
else if (IsEqualIID(riid, IID_IHttpSecurity))
{
*ppvObj = (IHttpSecurity *)this;
}
else
{
*ppvObj = NULL;
return E_NOINTERFACE;
}

((LPUNKNOWN)*ppvObj)->AddRef();

return NOERROR;
}

ULONG CURLBindStatusCallback::AddRef(void)
{
return ++m_cRef;
}

ULONG CURLBindStatusCallback::Release(void)
{
if (0L != --m_cRef)
return m_cRef;

delete this;
return 0L;
}

VOID CURLBindStatusCallback::Abort()
{
if (m_pib)
{
m_pib->Abort();
}
}

CURLBindStatusCallback::CURLBindStatusCallback(IBindCtx *pbc, IMoniker *pmkIn, HANDLE hEvent)
{
// Initialize object.
m_cRef = 0L;

m_pib = NULL;
m_pbc = pbc;
if (m_pbc)
m_pbc->AddRef();

m_pmk = pmkIn;
if(m_pmk)
m_pmk->AddRef();

m_hEvent = hEvent;
}

CURLBindStatusCallback::~CURLBindStatusCallback()
{
if (m_pib)
{
m_pib->Release();
m_pib = NULL;
}

if (m_pbc)
{
m_pbc->Release();
m_pbc = NULL;
}

if (m_pmk)
{
m_pmk->Release();
m_pmk = NULL;
}

if (m_hEvent)
CloseHandle(m_hEvent);
}

// IAuthenticate Methods
STDMETHODIMP CURLBindStatusCallback::Authenticate(HWND *phwnd, LPWSTR *pszUsername, LPWSTR *pszPassword)
{
return E_NOTIMPL;
}

// IBindStatusCallback Methods
STDMETHODIMP CURLBindStatusCallback::OnStartBinding(DWORD grfBSCOption, IBinding *pibIn)
{
return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::GetPriority(LONG *pnPriority)
{
ATLTRACE2(atlTraceControls,2, _T("CURLBindStatusCallback::GetPriority"));
HRESULT hr = S_OK;
if (pnPriority)
*pnPriority = THREAD_PRIORITY_NORMAL;
else
hr = E_INVALIDARG;
return S_OK;

return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::OnLowResource(DWORD reserved)
{
ATLTRACE2(atlTraceControls,2,_T("CURLBindStatusCallback::OnLowResource"));
return S_OK; //BUGBUG
}

STDMETHODIMP CURLBindStatusCallback::OnProgress(ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCWSTR szStatusText)
{
ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnProgress"));
TRACE(_T("Downloading....%d %d %s\n"), ulProgress, ulProgressMax, szStatusText);
return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::OnStopBinding(HRESULT hresult, LPCWSTR szError)
{
ATLTRACE2(atlTraceControls,2,_T("CURLBindStatusCallback::OnStopBinding\n"));
HRESULT hr = S_OK;
if (SUCCEEDED(hresult))
{
OutputDebugString(TEXT("Done Loading succesfully"));
}
// Signal event to wake up thread to navigate children.
SetEvent(m_hEvent);

if (m_pib)
{
m_pib->Release();
m_pib = NULL;
}

return hr;
}

STDMETHODIMP CURLBindStatusCallback::GetBindInfo(DWORD *grfBINDF, /* [out] */
BINDINFO *pbindinfo /* [unique][out][in] */ )
{
ATLTRACE2(atlTraceControls, 2, _T("CURLBindStatusCallback::GetBindInfo\n"));

/* if (pbindinfo == NULL || pbindInfo->cbSize == 0 || pgrfBINDF == NULL)
return E_INVALIDARG;

*pgrfBINDF = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE |
BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE;

ULONG cbSize = pbindInfo->cbSize; // remember incoming cbSize
memset(pbindInfo, 0, cbSize); // zero out structure
pbindInfo->cbSize = cbSize; // restore cbSize
pbindInfo->dwBindVerb = BINDVERB_GET; // set verb*/

return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::OnDataAvailable(
/* [in] */ DWORD grfBSCF,
/* [in] */ DWORD dwSize,
/* [in] */ FORMATETC *pformatetc,
/* [in] */ STGMEDIUM *pstgmed)
{
return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::OnObjectAvailable(
/* [in] */ REFIID riid,
/* [iid_is][in] */ IUnknown *punk)
{
ATLTRACE2(atlTraceControls,2,_T("CURLBindStatusCallback::OnObjectAvailable"));
return S_OK;
}

/* *** IHttpSecurity *** */
// BUGBUG - Do we need to implement this interface
STDMETHODIMP CURLBindStatusCallback::GetWindow(REFGUID rguidReason, HWND* phwnd)
{
if (!phwnd)
return E_POINTER;

*phwnd = NULL; // BUGBUG
return S_OK;
}

STDMETHODIMP CURLBindStatusCallback::OnSecurityProblem(DWORD dwProblem)
{
// Force UI - return S_FALSE for all problems.
return S_FALSE;
}
wuxfBrave 2003-10-16
  • 打赏
  • 举报
回复
// URLBindStatusCallback.h: interface for the CURLBindStatusCallback class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_URLBINDSTATUSCALLBACK_H__CB2E3242_24D7_487A_8DB5_AB0CD045EFF4__INCLUDED_)
#define AFX_URLBINDSTATUSCALLBACK_H__CB2E3242_24D7_487A_8DB5_AB0CD045EFF4__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CURLBindStatusCallback : public IBindStatusCallback, public IAuthenticate, public IHttpSecurity
{
public:
CURLBindStatusCallback(IBindCtx *pbc, IMoniker *pmkIn, HANDLE hEvent);
virtual ~CURLBindStatusCallback();

public:
// *** IUnknown methods ***
STDMETHOD(QueryInterface)(REFIID riid, LPVOID * ppvObj);
STDMETHOD_(ULONG, AddRef)(void) ;
STDMETHOD_(ULONG, Release)(void);

// *** IAuthenticate ***
STDMETHOD(Authenticate)(HWND *phwnd, LPWSTR *pszUsername, LPWSTR *pszPassword);

// *** IBindStatusCallback ***
STDMETHOD(OnStartBinding)(/* [in] */ DWORD grfBSCOption, /* [in] */ IBinding *pib);

STDMETHOD(GetPriority)(/* [out] */ LONG *pnPriority);
STDMETHOD(OnLowResource)(/* [in] */ DWORD reserved);

STDMETHOD(OnProgress)(/* [in] */ ULONG ulProgress, /* [in] */ ULONG ulProgressMax,
/* [in] */ ULONG ulStatusCode, /* [in] */ LPCWSTR szStatusText);

STDMETHOD(OnStopBinding)(/* [in] */ HRESULT hresult, /* [in] */ LPCWSTR szError);

STDMETHOD(GetBindInfo)(/* [out] */ DWORD *grfBINDF, /* [unique][out][in] */ BINDINFO *pbindinfo);

STDMETHOD(OnDataAvailable)(/* [in] */ DWORD grfBSCF, /* [in] */ DWORD dwSize, /* [in] */ FORMATETC *pformatetc, /* [in] */ STGMEDIUM *pstgmed);

STDMETHOD(OnObjectAvailable)(/* [in] */ REFIID riid, /* [iid_is][in] */ IUnknown *punk);

/* *** IHttpSecurity *** */
STDMETHOD(GetWindow)(REFGUID rguidReason, HWND* phwnd);

STDMETHOD(OnSecurityProblem)(DWORD dwProblem);

// Worker routines

IBinding* m_pib;
IMoniker* m_pmk;
IBindCtx* m_pbc;
HANDLE m_hEvent;

ULONG m_cRef;

VOID Abort(); // Aborts the binding
};

#endif // !defined(AFX_URLBINDSTATUSCALLBACK_H__CB2E3242_24D7_487A_8DB5_AB0CD045EFF4__INCLUDED_)
wuxfBrave 2003-10-16
  • 打赏
  • 举报
回复
BOOL CXMLDocument::OpenDocument(LPCTSTR lpcszXMLFilePath)
{
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;

if (!AfxParseURL(lpcszXMLFilePath, dwServiceType, strServerName, strObject, nPort) ||
dwServiceType != INTERNET_SERVICE_HTTP)
{
AfxAddTraceEx(DEBUG_LEVEL_6, _T("打开XML文档时不正确的路径:%s"), lpcszXMLFilePath);

return FALSE;
}

DeleteContents();

HRESULT hr = S_FALSE;

USES_CONVERSION;
LPCWSTR lpwszUrl = T2CW(lpcszXMLFilePath);

IUnknown *pUnk = NULL;
hr = CoCreateInstance(CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IUnknown, (void **)&pUnk);
if (FAILED(hr) || pUnk == NULL)
return FALSE;

MSXML::IXMLDocument *pDoc = NULL;
hr = pUnk->QueryInterface(IID_IXMLDocument, (void **)&pDoc);

pUnk->Release();
pUnk = NULL;

if (FAILED(hr) || pDoc == NULL)
return FALSE;

IPersistMoniker *pPersistmk = NULL;
hr = pDoc->QueryInterface(IID_IPersistMoniker, (void **)&pPersistmk);
if (FAILED(hr) || pPersistmk == NULL)
{
pDoc->Release();
return FALSE;
}

IMoniker *pmk = NULL;
hr = CreateURLMoniker(NULL, lpwszUrl, &pmk);
if (FAILED(hr) || pmk == NULL)
{
pDoc->Release();
pPersistmk->Release();
return FALSE;
}

IBindCtx *pbc = NULL;
hr = CreateBindCtx(0, &pbc);
if ((!pbc) || FAILED(hr))
{
pDoc->Release();
pPersistmk->Release();
pmk->Release();
}
pbc->AddRef();

HANDLE hEvent = CreateEventA(0, 0, 0, 0);

IBindStatusCallback *pPreviousCallback = NULL;

CURLBindStatusCallback *pbsc = new CURLBindStatusCallback(pbc, pmk, hEvent);
hr = RegisterBindStatusCallback(pbc, pbsc, &pPreviousCallback, 0);
if (FAILED(hr))
{
ASSERT(FALSE);
pDoc->Release();
pPersistmk->Release();
return FALSE;
}
hr = pPersistmk->Load(FALSE, pmk, pbc, 0);

if (FAILED(hr))
{
ASSERT(FALSE);
pDoc->Release();
pPersistmk->Release();
return FALSE;
}

pPersistmk->Release();
pPersistmk = NULL;

while (1)
{
MSG msg;
DWORD dwRet = MsgWaitForMultipleObjects(1, &hEvent, FALSE, INFINITE, QS_ALLINPUT);
if (dwRet == WAIT_OBJECT_0)
{
break;
}
else
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
}
}

m_strURL = lpcszXMLFilePath;

if (!OpenXMLDocument(pDoc))
ASSERT(FALSE);

pDoc->Release();
pbsc->Release();

return TRUE;
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧