环境是 vs2008,一个从vc6.0升级上来的工程。
在使用loadXML的是,总是无法成功。
测试用的xml文档可以ie里头正确显示。
CoUninitialize();
是已经调用了的。bool HtmlItf::IsSuccess(BSTR sXML)
{
IXMLDOMDocument *pXmlDoc=NULL; HRESULT hr=CoCreateInstance(CLSID_DOMDocument,NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER/*CLSCTX_ALL*/, IID_IXMLDOMDocument,(LPVOID*)&pXmlDoc); if(hr == S_OK)
{
VARIANT_BOOL bFlag=VARIANT_FALSE;
pXmlDoc->put_async(VARIANT_FALSE);
pXmlDoc->put_validateOnParse(VARIANT_TRUE);
hr = pXmlDoc->loadXML(sXML,&bFlag); ///<这里返回总是失败. if(bFlag == VARIANT_FALSE)return false; IXMLDOMElement *pNodeElement;
hr = pXmlDoc->get_documentElement(&pNodeElement); if(hr != S_OK)return false; IXMLDOMNodeList *pNodeList; hr = pNodeElement->get_childNodes(&pNodeList); if(hr == S_OK)
{
IXMLDOMNode *pStateNode;
BSTR s;
BSTR sNodeName;
long NodeLen;
pNodeList->get_length(&NodeLen);
for(int i=0;i<NodeLen;i++)
{
pNodeList->get_item(i,&pStateNode);
pStateNode->get_nodeName(&sNodeName);
pStateNode->get_text(&s);
if(sNodeName = BSTR("state"))
{
if(s==BSTR("0"))
return false;
else if(s==BSTR("1"))
return true;
} }
}
}
return false;
}
在使用loadXML的是,总是无法成功。
测试用的xml文档可以ie里头正确显示。
CoUninitialize();
是已经调用了的。bool HtmlItf::IsSuccess(BSTR sXML)
{
IXMLDOMDocument *pXmlDoc=NULL; HRESULT hr=CoCreateInstance(CLSID_DOMDocument,NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER/*CLSCTX_ALL*/, IID_IXMLDOMDocument,(LPVOID*)&pXmlDoc); if(hr == S_OK)
{
VARIANT_BOOL bFlag=VARIANT_FALSE;
pXmlDoc->put_async(VARIANT_FALSE);
pXmlDoc->put_validateOnParse(VARIANT_TRUE);
hr = pXmlDoc->loadXML(sXML,&bFlag); ///<这里返回总是失败. if(bFlag == VARIANT_FALSE)return false; IXMLDOMElement *pNodeElement;
hr = pXmlDoc->get_documentElement(&pNodeElement); if(hr != S_OK)return false; IXMLDOMNodeList *pNodeList; hr = pNodeElement->get_childNodes(&pNodeList); if(hr == S_OK)
{
IXMLDOMNode *pStateNode;
BSTR s;
BSTR sNodeName;
long NodeLen;
pNodeList->get_length(&NodeLen);
for(int i=0;i<NodeLen;i++)
{
pNodeList->get_item(i,&pStateNode);
pStateNode->get_nodeName(&sNodeName);
pStateNode->get_text(&s);
if(sNodeName = BSTR("state"))
{
if(s==BSTR("0"))
return false;
else if(s==BSTR("1"))
return true;
} }
}
}
return false;
}
看看到底是哪一步出错了,再具体分析。
hr = pXmlDoc->loadXML(sXML,&bFlag); 这里显示失败,提示什么信息呢?
或者你好好检查下你的这个XML的编码。
http://blog.csdn.net/Jaguar1982/archive/2005/01/06/242302.aspx
IErrorInfo* pErrInfo = NULL;
CHKHR(::GetErrorInfo(0, &pErrInfo)); CComBSTR bstrDescription;
CComBSTR bstrSource;
CComBSTR bstrHelpFile; CHKHR(pErrInfo->GetDescription(&bstrDescription));
CHKHR(pErrInfo->GetSource(&bstrSource));
CHKHR(pErrInfo->GetHelpFile(&bstrHelpFile));
比较容易出错的地方是对DTD的访问,可以如下修改:
CHKHR(spDoc->put_validateOnParse(VARIANT_FALSE));
CHKHR(spDoc->put_resolveExternals(VARIANT_FALSE));
<media src = \"welcome1.asf\"/></smil>";
pXmlDoc->loadXML(bstrXML ,&bFlag); 你用这段代码试一下,看能否加载成功