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;
}
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;
}
需要同步阻塞读取的话,设置文档的async属性为假
hr = plDomDocument->loadXML(L"<customer><first_name>Joe</first_name><last_name>Smith</last_name></customer>");
if (!FAILED(hr)) // hr仍为-1,faint!
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;
}
//这个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)兄的写法更规范一些,呵呵。