一直不知道csdn的帖子不能编辑,上个帖子指接把代码贴进去了,结果被鄙视了两次。干脆把那个帖子结贴了,重开一个提问。谢谢捧场。
#import <msxml4.dll> //raw_interfaces_only
using namespace MSXML2;
hr = pXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if (FAILED(hr))
{
AfxMessageBox("Faild to Create XMLDom Instance !");
pXmlDoc=NULL;
}
else
{ _bstr_t xmlstr=(LPCSTR)strResult;
VARIANT_BOOL bresult;
bresult = pXmlDoc->loadXML(xmlstr);
if (!bresult)
{
pXmlDoc->Release();
pXmlDoc=NULL;
}
else
{
long count = -1;
pXmlDoc->get_childNodes(&pXmlList);
if (pXmlList == NULL)
{
throw;
}
pXmlList->get_length(&count);
for(int i = 0; i < count ;i++)
{
pXmlList->raw_nextNode(&pXmlNode);
if(!pXmlNode)
break;
pXmlNode->raw_selectSingleNode(bProperty,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strProperty= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNode->raw_selectSingleNode(bSerialID,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strSerialID= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
if (pView == NULL)
{
break;
}
}
pXmlNode->raw_selectSingleNode(bEquipeName,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strEquipeName = CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNode->raw_selectSingleNode(bMsgData,&pXDNTMsgData);
if (pXDNTMsgData!= NULL)
{
pXDNTMsgData->raw_selectSingleNode(bCheckState,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strCheckState= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->raw_selectSingleNode(bResultInfo,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_attributes(&pXmlNamedNodeMap);
if (pXmlNamedNodeMap!= NULL)
{
pXmlNamedNodeMap->getNamedItem("result_type")->get_text(&bStrText);
if (bStrText != NULL)
{
strIResultType= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNamedNodeMap->Release();
pXmlNamedNodeMap = NULL;
}
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strResultInfo= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->raw_selectSingleNode(bCheckedCount,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText!= NULL)
{
strCheckedCount = CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->Release();
pXDNTMsgData = NULL;
}
}
}
}
#import <msxml4.dll> //raw_interfaces_only
using namespace MSXML2;
hr = pXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if (FAILED(hr))
{
AfxMessageBox("Faild to Create XMLDom Instance !");
pXmlDoc=NULL;
}
else
{ _bstr_t xmlstr=(LPCSTR)strResult;
VARIANT_BOOL bresult;
bresult = pXmlDoc->loadXML(xmlstr);
if (!bresult)
{
pXmlDoc->Release();
pXmlDoc=NULL;
}
else
{
long count = -1;
pXmlDoc->get_childNodes(&pXmlList);
if (pXmlList == NULL)
{
throw;
}
pXmlList->get_length(&count);
for(int i = 0; i < count ;i++)
{
pXmlList->raw_nextNode(&pXmlNode);
if(!pXmlNode)
break;
pXmlNode->raw_selectSingleNode(bProperty,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strProperty= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNode->raw_selectSingleNode(bSerialID,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strSerialID= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
if (pView == NULL)
{
break;
}
}
pXmlNode->raw_selectSingleNode(bEquipeName,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strEquipeName = CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNode->raw_selectSingleNode(bMsgData,&pXDNTMsgData);
if (pXDNTMsgData!= NULL)
{
pXDNTMsgData->raw_selectSingleNode(bCheckState,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strCheckState= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->raw_selectSingleNode(bResultInfo,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_attributes(&pXmlNamedNodeMap);
if (pXmlNamedNodeMap!= NULL)
{
pXmlNamedNodeMap->getNamedItem("result_type")->get_text(&bStrText);
if (bStrText != NULL)
{
strIResultType= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXmlNamedNodeMap->Release();
pXmlNamedNodeMap = NULL;
}
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText != NULL)
{
strResultInfo= CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->raw_selectSingleNode(bCheckedCount,&pXDNTemp);
if (pXDNTemp!= NULL)
{
pXDNTemp->get_text(&bStrText);
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (bStrText!= NULL)
{
strCheckedCount = CString(bStrText);
SysFreeString(bStrText);
bStrText = NULL;
}
pXDNTMsgData->Release();
pXDNTMsgData = NULL;
}
}
}
}
应该是内存没有释放掉。你可以debug下
{
pXmlDoc.Release();
pXmlDoc = NULL;
}
if (pXmlNode!=NULL)
{
pXmlNode->Release();
pXmlNode = NULL;
}
if (pXmlList != NULL)
{
pXmlList->Release();
pXmlList = NULL;
}
if (pXDNTMsgData != NULL)
{
pXDNTMsgData->Release();
pXDNTMsgData = NULL;
}
if (pXDNTemp != NULL)
{
pXDNTemp->Release();
pXDNTemp = NULL;
}
if (pXmlNamedNodeMap != NULL)
{
pXmlNamedNodeMap->Release();
pXmlNamedNodeMap = NULL;
}
这部分忘记贴了。
以前系统里有解析xml的代码,直接拿过一部分来用了,因为原来数据量小,没发现这个问题。