CConfigXmlFile02

CConfigXmlFile02.h

#pragma once

#import <msxml6.dll> // raw_interfaces_only,named_guiIDs
using namespace MSXML2;

#include <vector>
using namespace std;

class CConfigXmlFile02
{
public:
CConfigXmlFile02(void);
virtual ~CConfigXmlFile02(void);
CConfigXmlFile02(CString path);

protected:
bool InitDoc(void);



public:
int GetNodeAttTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> vecData);
int GetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> &vecData);
int GetNodeIntArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<int> &vecData);
int GetNodeChildNoteCount(LPCTSTR lpszItem);

// unit get
CString GetNodeText(LPCTSTR lpszItem);
INT GetNodeInt(LPCTSTR lpszItem);
INT GetNodeRGB(LPCTSTR lpszItem);


// arr get
int SetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszSubItem, vector<CString> vecData);

// unit set
BOOL SetNodeText(LPCTSTR lpszItem, LPCTSTR lpszText);
BOOL SetNodeInt(LPCTSTR lpszItem, int nData);

private:
CString m_filepath;
MSXML2::IXMLDOMDocument2Ptr m_spReadPrjDoc;

protected:
int RemoveChildNode(void);
};

CConfigXmlFile02.cpp

#include "stdafx.h"
#include "ConfigXmlFile02.h"

#import <msxml6.dll> // raw_interfaces_only,named_guids
using namespace MSXML2;


CConfigXmlFile02::CConfigXmlFile02(void)
{
}

CConfigXmlFile02::CConfigXmlFile02(CString path)
{
m_filepath = path;
InitDoc();
}

CConfigXmlFile02::~CConfigXmlFile02(void)
{
}


bool CConfigXmlFile02::InitDoc(void)
{
//read inf.xml
HRESULT hResult;
// Create the COM DOM Document object

hResult = CoInitialize(NULL);
hResult = m_spReadPrjDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if FAILED(hResult)
{
m_spReadPrjDoc=NULL;
return false;
}
m_spReadPrjDoc->async = VARIANT_FALSE;
hResult = m_spReadPrjDoc->load((_variant_t)m_filepath);
if (hResult != VARIANT_TRUE)
{
m_spReadPrjDoc=NULL;
return false;
}

return true;
}

CString CConfigXmlFile02::GetNodeText(LPCTSTR lpszItem)
{
// 返回以秒为单位
USES_CONVERSION;
CString strItem(lpszItem);
BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
BSTR bstrContent;
spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
spNode->get_text(&bstrContent);
CString Propath(::_com_util::ConvertBSTRToString(bstrContent));
return Propath;
}
else
{
return _T("");
}
}

BOOL CConfigXmlFile02::SetNodeText(LPCTSTR lpszItem, LPCTSTR lpszText)
{
// 返回以秒为单位
USES_CONVERSION;
CString strItem(lpszItem);
BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
BSTR bstrContent = ::_com_util::ConvertStringToBSTR(T2A(lpszText));

spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
spNode->put_text(bstrContent);


m_spReadPrjDoc->save((_variant_t)m_filepath);//节点处理函数

return TRUE;
}
else
{
return FALSE;
}
}

BOOL CConfigXmlFile02::SetNodeInt(LPCTSTR lpszItem, int nData)
{
CString sData;
sData.Format(_T("%d"), nData);

return SetNodeText(lpszItem, (LPCTSTR)sData);
}

int CConfigXmlFile02::GetNodeChildNoteCount(LPCTSTR lpszItem)
{
USES_CONVERSION;
CString strItem(lpszItem);
BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);

MSXML2::IXMLDOMNodeListPtr spGroupsList=spNode->childNodes;
if(spGroupsList)
{
int lListLength=spGroupsList->Getlength();
return lListLength;
}
else
{
return 0;
}
}
else
{
return 0;
}

return 0;
}


INT CConfigXmlFile02::GetNodeInt(LPCTSTR lpszItem)
{
CString strContent = GetNodeText(lpszItem);
if (strContent==_T(""))
return 0;
else
{
INT iContent = _ttoi(strContent.GetBuffer(0));
return iContent;
}
}

INT CConfigXmlFile02::GetNodeRGB(LPCTSTR lpszItem)
{
CString strItem(lpszItem);
CString strRItem = strItem + _T("//red");
CString strGItem = strItem + _T("//green");
CString strBItem = strItem + _T("//blue");

int r,g,b;
r = GetNodeInt(strRItem);
g = GetNodeInt(strGItem);
b = GetNodeInt(strBItem);

return RGB(r, g, b);
}

int CConfigXmlFile02::GetNodeAttTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> vecData)
{
USES_CONVERSION;

CString strItem(lpszItem);
CString strAttributeName(lpszAtt);

BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
BSTR bstrContent;
spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
if(spNode)
{
MSXML2::IXMLDOMNodeListPtr spGroupsList;
spGroupsList=spNode->childNodes;
if(spGroupsList)
{
int lListLength=spGroupsList->Getlength();
UINT max = (UINT)lListLength;
for (UINT i=0;i<max;i++)
{
MSXML2::IXMLDOMNodePtr subnode = NULL;
spGroupsList->get_item(i, &subnode);

if (subnode)
{
// attribute
VARIANT varValue;
MSXML2::IXMLDOMNamedNodeMapPtr attributeMap = NULL;

subnode->get_attributes(&attributeMap);
MSXML2::IXMLDOMNodePtr pIXMLDOMNode = attributeMap->getNamedItem(strAttributeName.AllocSysString());
pIXMLDOMNode->get_nodeValue(&varValue);

CString AttContent(::_com_util::ConvertBSTRToString(varValue.bstrVal));
vecData.push_back(AttContent);
}
}

return max;
}
}

return 0;
}
else
{
return 0;
}
}

int CConfigXmlFile02::GetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> &vecData)
{
USES_CONVERSION;

CString strItem(lpszItem);
CString strAttributeName(lpszAtt);

BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMElementPtr spElem;
MSXML2::IXMLDOMNodePtr spParentNode;
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
BSTR bstrContent;
spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
if(spNode)
{
MSXML2::IXMLDOMNodeListPtr spGroupsList;
spGroupsList=spNode->childNodes;


if(spGroupsList)
{
// read
vecData.clear();
int lListLength=spGroupsList->Getlength();
for (int i=0 ;i<lListLength ;i++)
{
MSXML2::IXMLDOMNodePtr subnode = NULL;
spGroupsList->get_item(i, &subnode);
subnode->get_text(&bstrContent);

CString Content(::_com_util::ConvertBSTRToString(bstrContent));
vecData.push_back(Content);
}

return lListLength;
}
}

return 0;
}
else
{
return 0;
}
}

int CConfigXmlFile02::GetNodeIntArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<int> &vecData)
{
vecData.clear();

vector<CString> vecString;
int res = GetNodeTextArr( lpszItem, lpszAtt, vecString);
for (int i=0; i<vecString.size(); i++)
{
CString stemp = vecString.at(i);
int ntemp = _ttoi(stemp.GetBuffer(0));
vecData.push_back(ntemp);
}

return res;

}
int CConfigXmlFile02::SetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszSubItem, vector<CString> vecData)
{
USES_CONVERSION;

CString strItem(lpszItem);
//CString strAttributeName(lpszSubItem);

BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

// read content and attribute
MSXML2::IXMLDOMElementPtr spElem;
MSXML2::IXMLDOMNodePtr spParentNode;
MSXML2::IXMLDOMNodePtr spNode;
if(m_spReadPrjDoc)
{
BSTR bstrContent;
spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
if(spNode)
{
MSXML2::IXMLDOMNodeListPtr spGroupsList;
spGroupsList=spNode->childNodes;

if(spGroupsList)
{
// clear node
int lListLength=spGroupsList->Getlength();
for (int i=lListLength-1;i>=0;i--)
{
MSXML2::IXMLDOMNodePtr subnode = NULL;
spGroupsList->get_item(i, &subnode);

spNode->removeChild(subnode);
}

// add item
for (int i=0; i<vecData.size(); i++)
{
CString strNodeName;
CString strNodeValue = vecData.at(i);
strNodeName.Format( _T("%s%d"), lpszSubItem, i);

spElem = m_spReadPrjDoc->createElement(strNodeName.AllocSysString());
spElem->text = strNodeValue.AllocSysString();
HRESULT hResult;
hResult = spNode->appendChild(spElem);
if FAILED(hResult)
{
return 5; //插入失败
}
}

m_spReadPrjDoc->save((_variant_t)m_filepath);//节点处理函数

return vecData.size();
}
}

return 0;
}
else
{
return 0;
}
}

int CConfigXmlFile02::RemoveChildNode(void)
{
return 0;
}





原文地址:https://www.cnblogs.com/carl2380/p/2317350.html