BOOL Result = FALSE;
IXMLDOMDocumentPtr plDomDocument;
IXMLDOMElementPtr pDocNode;
IXMLDOMNodeListPtr pChild;// Initialize COM
::CoInitialize(NULL);HRESULT hr = plDomDocument.CreateInstance(CLSID_DOMDocument);
if (FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
return FALSE;
}//=======================================================================================
//Load
AfxMessageBox(m_strXML);hr = plDomDocument->loadXML(L"<customer><first_name>Joe</first_name><last_name>Smith</last_name></customer>");
if (!FAILED(hr)) // success!
{
pDocNode = plDomDocument->documentElement;
}

解决方案 »

  1.   

    默认是异步读取文档,在文档读完的时候会有事件通知
    需要同步阻塞读取的话,设置文档的async属性为假
      

  2.   

    已经试了,如下: plDomDocument->put_async(VARIANT_FALSE);  //设置async
    hr = plDomDocument->loadXML(L"<customer><first_name>Joe</first_name><last_name>Smith</last_name></customer>");
    if (!FAILED(hr)) // hr仍为-1,faint!
      

  3.   

    你传过去的是WSTR,不是BSTR
    BOOL CXmlDoc::loadFromXml(const CString& strXml)
    {
    _bstr_t bstrXml((LPCTSTR)strXml);
    try{
    m_pXMLDocument2->async=VARIANT_FALSE;
    VARIANT_BOOL varOkay = m_pXMLDocument2->loadXML(bstrXml);

    if (varOkay){
    ......
    }
    else {
    CGlobal::g_PrintXMLDOMParseError(m_pXMLDocument2->parseError);
    return FALSE;
    }
    }
    catch(_com_error &e){
    CGlobal::g_PrintComError(e);
    return FALSE;
    }
    return TRUE;
    }
      

  4.   

    呵呵,问题找出来了,偶犯了低级错误!hr = plDomDocument->loadXML(L"<customer>sdfadf</customer>");
    //这个hr被声明为BOOL型的,而返回值是variant的bool值,
    //而variant的bool值等于-1是真,0是假,所以,昨天是自己给自己找了麻烦!if (!FAILED(hr)) //这样子判断,当然错啦!正确的应该是:
    variant_t vResult;  //
    vResult = plDomDocument->loadXML(m_strXML.AllocSysString());
    if (((bool)vResult) == TRUE) // 这样比较才成功!当然jiangsheng(蒋晟.Net)兄的写法更规范一些,呵呵。