xml很简单,定义:
<root>
<msg>
<title>网站1</title>
<url>www.263.net</url>
<time>13</time>
</msg>
<msg>
<title>网站2</title>
<url>www.csdn.net</url>
<time>24</time>
</msg>
......
</root> 我需要把里面的数据依次都取出来。
下面的代码我是从CSDN上看的,然后自己改的,可是现在编译错误:
error C2872: 'DOMNodeType' : ambiguous symbol
error C2664: 'get_attributes' : cannot convert parameter 1 from 'struct MSXML2::IXMLDOMNode ** ' to 'struct MSXML2::IXMLDOMNamedNodeMap ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast代码如下:
#import "msxml3.dll"
#include "msxml2.h"using namespace MSXML2;
int searchXML(char *xmlstring)
{
CoInitialize(NULL);
try {
IXMLDOMDocumentPtr spXMLDOM;
HRESULT hr = spXMLDOM.CreateInstance(__uuidof(DOMDocument));
if ( FAILED(hr) ) { throw "Can't create XML Parser Object!"; return -1; }
// 如果对象创建成功的话,就开始装载XML文档
hr = spXMLDOM->loadXML(_bstr_t(xmlstring));
if ( FAILED(hr) ) { throw "Don't Understand Error!"; return -1; }
IXMLDOMElementPtr childNode;
childNode = (IXMLDOMElementPtr)(spXMLDOM->selectSingleNode("//msg"));
DOMNodeType nodeType;
childNode->get_nodeType(&nodeType); BSTR var;
CString name;
var = childNode->GetnodeName();
name = (char*)(_bstr_t)var;
VARIANT varval;
varval = childNode->GetnodeTypedValue();
CString strValue = (char*)(_bstr_t)varval; IXMLDOMNamedNodeMapPtr pAttrs = NULL;
IXMLDOMNodePtr pAttrItem;
childNode->get_attributes(&pAttrItem);
long lCounts;
pAttrs->get_length(&lCounts);
for (int i=0; i<lCounts; i++)
{
pAttrs->get_item(i, &pAttrItem);
}
}
catch(char* lpstrErr)
{
printf(lpstrErr);
CoUninitialize();
}
catch(...)
{
printf("***************程序出现异常!!!***************");
CoUninitialize();
} CoUninitialize();
}对COM不熟,可是现在要用到了 :(
希望能得到大家的帮助,小弟多谢!!
<root>
<msg>
<title>网站1</title>
<url>www.263.net</url>
<time>13</time>
</msg>
<msg>
<title>网站2</title>
<url>www.csdn.net</url>
<time>24</time>
</msg>
......
</root> 我需要把里面的数据依次都取出来。
下面的代码我是从CSDN上看的,然后自己改的,可是现在编译错误:
error C2872: 'DOMNodeType' : ambiguous symbol
error C2664: 'get_attributes' : cannot convert parameter 1 from 'struct MSXML2::IXMLDOMNode ** ' to 'struct MSXML2::IXMLDOMNamedNodeMap ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast代码如下:
#import "msxml3.dll"
#include "msxml2.h"using namespace MSXML2;
int searchXML(char *xmlstring)
{
CoInitialize(NULL);
try {
IXMLDOMDocumentPtr spXMLDOM;
HRESULT hr = spXMLDOM.CreateInstance(__uuidof(DOMDocument));
if ( FAILED(hr) ) { throw "Can't create XML Parser Object!"; return -1; }
// 如果对象创建成功的话,就开始装载XML文档
hr = spXMLDOM->loadXML(_bstr_t(xmlstring));
if ( FAILED(hr) ) { throw "Don't Understand Error!"; return -1; }
IXMLDOMElementPtr childNode;
childNode = (IXMLDOMElementPtr)(spXMLDOM->selectSingleNode("//msg"));
DOMNodeType nodeType;
childNode->get_nodeType(&nodeType); BSTR var;
CString name;
var = childNode->GetnodeName();
name = (char*)(_bstr_t)var;
VARIANT varval;
varval = childNode->GetnodeTypedValue();
CString strValue = (char*)(_bstr_t)varval; IXMLDOMNamedNodeMapPtr pAttrs = NULL;
IXMLDOMNodePtr pAttrItem;
childNode->get_attributes(&pAttrItem);
long lCounts;
pAttrs->get_length(&lCounts);
for (int i=0; i<lCounts; i++)
{
pAttrs->get_item(i, &pAttrItem);
}
}
catch(char* lpstrErr)
{
printf(lpstrErr);
CoUninitialize();
}
catch(...)
{
printf("***************程序出现异常!!!***************");
CoUninitialize();
} CoUninitialize();
}对COM不熟,可是现在要用到了 :(
希望能得到大家的帮助,小弟多谢!!
解决方案 »
- 怎样把一个ICO贴到窗口上
- com中的一些困惑
- 如何验证FFT算法的正确性?
- 请教一下在windows VC++6.0开发环境下,fork函数的调用问题!!!
- 执行了CBitmap::GetBitmapBits()之后,缓冲区中填充的位模式结构是怎样的?谢谢
- 请教打印和预览功能!
- 窗口最大化后,取客户区大小还是没最大化时的大小,为什么????
- 如何得到一个弹出式菜单中,我点击的那一项的上面的文本?
- 如何防止进程在任务管理器中被终止
- 我用InstallShield for vc++6.0 将程序进行打包制作,可是为什么没有生成相应的应用程序?还是不能移植,请指点!
- pcap_next_ex问题,
- 高手来领分,怎么获取另外一个进程里面所有线程的返回码
childNode->get_attributes(&pAttrsTmp);你参数类型定义错了
hr = spXMLDOM->loadXML(_bstr_t(xmlstring));
我看别的地方都是load一个xml文件,我这里是一个char *,这样可以吗?
_variant_t varXml(strXmlName);
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);strXmlName就是文件路径名比如“d:\\xmltest.xml”
这样该怎么办呢?还是谢谢您又给我回复 :)