msxml4的DOM方式解析XML遇到的问题,求高人指点,谢谢!

ParkPeng 2005-04-19 09:11:03
我依据MSDN2003中Dom Developer's Guide介绍的步骤来解析XML文件:
1.安装了MSXML4.MSI文件.查看SYSTEM32目录发现MSXML4.DLL和MSXML4R.DLL及MSXML4A.DLL都存在,证明安装成功.
2.用Visual C++ 6.0建立了一个WIN32 Console Application,加入loadDOM.cpp文件(MSDN照COPY):
//----------------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#import <msxml4.dll> raw_interfaces_only
using namespace MSXML2;

// Macro that calls a COM method returning HRESULT value:
#define HRCALL(a, errmsg) \
do { \
hr = (a); \
if (FAILED(hr)) { \
dprintf( "%s:%d HRCALL Failed: %s\n 0x%.8x = %s\n", \
__FILE__, __LINE__, errmsg, hr, #a ); \
goto clean; \
} \
} while (0)

// Helper function that put output in stdout and debug window
// in Visual Studio:
void dprintf( char * format, ...)
{
static char buf[1024];
va_list args;
va_start( args, format );
vsprintf( buf, format, args );
va_end( args);
OutputDebugStringA( buf);
printf("%s", buf);
}

// Helper function to create a DOM instance:
IXMLDOMDocument* DomFromCOM()
{
HRESULT hr;
IXMLDOMDocument *pxmldoc = NULL;

HRCALL( CoCreateInstance(__uuidof(DOMDocument40),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IXMLDOMDocument),
(void**)&pxmldoc),
"Create a new DOMDocument");

HRCALL( pxmldoc->put_async(VARIANT_FALSE),
"should never fail");
HRCALL( pxmldoc->put_validateOnParse(VARIANT_FALSE),
"should never fail");
HRCALL( pxmldoc->put_resolveExternals(VARIANT_FALSE),
"should never fail");

return pxmldoc;
clean:
if (pxmldoc)
{
pxmldoc->Release();
}
return NULL;
}


int main(int argc, char* argv[])
{
IXMLDOMDocument *pXMLDom=NULL;
IXMLDOMParseError *pXMLErr=NULL;
BSTR bstr = NULL;
VARIANT_BOOL status;
VARIANT var;
HRESULT hr;

CoInitialize(NULL);

pXMLDom = DomFromCOM();
if (!pXMLDom) goto clean;

VariantInit(&var);
V_BSTR(&var) = SysAllocString(L"stocks.xml");
V_VT(&var) = VT_BSTR;
HRCALL(pXMLDom->load(var, &status), "");

if (status!=VARIANT_TRUE) {
HRCALL(pXMLDom->get_parseError(&pXMLErr),"");
HRCALL(pXMLErr->get_reason(&bstr),"");
dprintf("Failed to load DOM from stocks.xml. %S\n",
bstr);
goto clean;
}
HRCALL(pXMLDom->get_xml(&bstr), "");
dprintf("XML DOM loaded from stocks.xml:\n%S\n",bstr);

clean:
if (bstr) SysFreeString(bstr);
if (&var) VariantClear(&var);
if (pXMLErr) pXMLErr->Release();
if (pXMLDom) pXMLDom->Release();

CoUninitialize();
return 0;
}
//-----------------------------------------------------------------------------
3.加入一个C++文件,命名为stocks.xml,拷入:
<?xml version="1.0"?>
<?xml:stylesheet type="text/xsl" href="stock.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes">
<stock exchange="nasdaq">
<name>new</name>
<symbol>zzzz</symbol>
<price dt:dt="number">20.313</price>
</stock>
<stock exchange="nyse">
<name>zacx corp</name>
<symbol>ZCXM</symbol>
<price dt:dt="number">28.875</price>
</stock>
<stock exchange="nasdaq">
<name>zaffymat inc</name>
<symbol>ZFFX</symbol>
<price dt:dt="number">92.250</price>
</stock>
<stock exchange="nasdaq">
<name>zysmergy inc</name>
<symbol>ZYSZ</symbol>
<price dt:dt="number">20.313</price>
</stock>
</portfolio>
4.F7 Build出现如下错误:
--------------------Configuration: DOM2 - Win32 Debug--------------------
Compiling...
loadDom.cpp
e:\c\dom\loaddom.cpp(31) : error C2872: 'IXMLDOMDocument' : ambiguous symbol
e:\c\dom\loaddom.cpp(34) : error C2872: 'IXMLDOMDocument' : ambiguous symbol
e:\c\dom\loaddom.cpp(41) : error C2872: 'IXMLDOMDocument' : ambiguous symbol
e:\c\dom\loaddom.cpp(62) : error C2872: 'IXMLDOMDocument' : ambiguous symbol
e:\c\dom\loaddom.cpp(63) : error C2872: 'IXMLDOMParseError' : ambiguous symbol
Error executing cl.exe.

DOM2.exe - 5 error(s), 0 warning(s)

请问问题出在哪里?谢谢!!
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
WoodJohn 2005-06-02
  • 打赏
  • 举报
回复
顶!

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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