使用MSXML加载XML失败 报错!

deng88xin 2014-09-05 03:19:25
在使用MSXML加载XML时出错,程序提示跳到
Interface* operator->() const 
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}
return m_pInterface;
}

这里出错
下面附上c++代码
void CschemaXmlDlg::OnBnClickedLoad()
{
// TODO: Add your control notification handler code here
CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr rootNode;
MSXML2::IXMLDOMNodeListPtr nodeList;
MSXML2::IXMLDOMNodePtr pNode;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if(!SUCCEEDED(hr))
{
MessageBox(_T("Error"));
return;
}
variant_t vResult;
vResult=pDoc->load(L"d://he.xml");
if (((bool)vResult) != TRUE) // 加载失败
{
MessageBox(L"load failed");
return;
}
//pDoc->get_documentElement(&rootNode); //效果和下句一样
rootNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode(L"//Book"));
rootNode->get_childNodes(&nodeList);
BSTR bstr;
pNode->get_nodeName(&bstr);
int len;
nodeList->get_length((long*)&len);
for(int i=0;i<len;i++)
{
nodeList->get_item(i,&pNode);
pNode->get_nodeName(&bstr);
if((char*)(_bstr_t)bstr=="Author")
m_strAuthor=(char*)(_bstr_t)pNode->nodeTypedValue;
else if((char*)(_bstr_t)bstr=="Title")
m_strTitle=(char*)(_bstr_t)pNode->nodeTypedValue;
}

UpdateData(FALSE);
}

在线坐等大神解救
...全文
262 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2014-09-05
  • 打赏
  • 举报
回复
一直 在用 CComBSTR , 不好意思。
		_bstr_t bstrName;
		pNode->get_nodeName(bstrName.GetAddress());
		if (bstrName == _bstr_t(L"aaaa"))
deng88xin 2014-09-05
  • 打赏
  • 举报
回复
截图如下
deng88xin 2014-09-05
  • 打赏
  • 举报
回复
重载部分 怎么提示错误呢?
deng88xin 2014-09-05
  • 打赏
  • 举报
回复
非常感谢!!
Saleayas 2014-09-05
  • 打赏
  • 举报
回复
_bstr_t bstrName; pNode->get_nodeName(&bstrName); if(bstrName=="Author") 如果直接使用 BSTR,要注意释放。 使用 _bstr_t 就简单了。
deng88xin 2014-09-05
  • 打赏
  • 举报
回复
对这个不太熟,能提供这句使用重载的比较的完整代码吗?谢谢了
Saleayas 2014-09-05
  • 打赏
  • 举报
回复
if((char*)(_bstr_t)bstr=="Author") m_strAuthor=(char*)(_bstr_t)pNode->nodeTypedValue; else if((char*)(_bstr_t)bstr=="Title") m_strTitle=(char*)(_bstr_t)pNode->nodeTypedValue; 字符串不能使用这个比较,== 比较的字符串指针。 字符串使用 strcmp。 可以直接使用 _bstr_t 的 operator==,不要转换成 char *.
deng88xin 2014-09-05
  • 打赏
  • 举报
回复
这句多余了,,忘删了,谢谢。。现在能正确运行了,但是为什么我的EDit接受到的是空呢。
Saleayas 2014-09-05
  • 打赏
  • 举报
回复
pNode->get_nodeName(&bstr); 没有看到 pNode 赋值的地方。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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