3,055
社区成员
发帖
与我相关
我的任务
分享
CString ::ReadSingleNodeXml(CString sec,CString key)
{
CoInitialize(NULL);
BSTR strv=L"";
CString strdir=_T("");
CString selnodecstr=_T("");
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
GetAppPath(strdir);
strdir=strdir+_T("\\Program\\aConfig.xml");
CComVariant varXmlFile(strdir);
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CComBSTR bstrXml;
CComPtr<IXMLDOMElement> spRoot=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
spRoot->get_xml(&bstrXml);
CComPtr<IXMLDOMNode> spTheNode=NULL;
selnodecstr=_T("/aConfig/")+sec+_T("/")+key;
spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode);
if (spTheNode!=NULL)//节点未找到
{
spTheNode->get_text(&strv);
}
spRoot.Release();
bstrXml.Empty();
}
varXmlFile.ClearToZero();
}
spXmldoc.Release();
CoUninitialize();
return (CString)strv;
}
int ::WriteSingleNodeXml(CString sec,CString key,CString val)
{
CoInitialize(NULL);
int result=1;
CString strdir=_T("");
CString selnodecstr=_T("");
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
GetAppPath(strdir);
strdir=strdir+_T("\\Program\\aConfig.xml");
CComVariant varXmlFile(strdir);
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CComBSTR bstrXml;
CComPtr<IXMLDOMElement> spRoot=NULL;
CComPtr<IXMLDOMElement> spTheElem=NULL;
CComPtr<IXMLDOMNode> spNewNode=NULL;
CComPtr<IXMLDOMNode> spTheNode=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
spRoot->get_xml(&bstrXml);
selnodecstr=_T("/aConfig/")+sec+_T("/")+key;
spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode);
if (spTheNode!=NULL)//节点未找到
{
spTheNode->put_text(::SysAllocString(val));
spXmldoc->save(varXmlFile); //保存xml。
result=0;
}
else
{
spXmldoc->createElement(::SysAllocString(key),&spTheElem);
spTheElem->put_text(::SysAllocString(val));
spRoot->selectSingleNode(::SysAllocString(_T("/SaejongConfig/")+sec),&spTheNode);
spTheNode->appendChild(spTheElem,&spNewNode);
spXmldoc->save(varXmlFile); //保存xml。
result=0;
}
spRoot.Release();
bstrXml.Empty();
}
varXmlFile.ClearToZero();
}
spXmldoc.Release();
CoUninitialize();
return result;
}