由于项目需要,实现个简单结构的XML的写操作,随手记录一下,以便背忘及有助其他人参考吧,有兴趣的话,可以扩展功能。
结构例子如下:(目前不支持属性)
<root>
<node>value</node>
</root>
具体代码如下
#pragma once
// XML Attribute
struct XmlAttribute
{
CString strName;
CString strValue;
XmlAttribute(){
strName = L"";
strValue= L"";
};
};
struct XmlNode
{
CString strName;
CString strValue;
XmlNode * pChildRoot;
XmlAttribute * pAttrRoot;
XmlNode * pNextNode;
XmlNode(){
strName = L"";
strValue = L"";
pChildRoot = NULL;
pAttrRoot = NULL;
pNextNode = NULL;
};
~XmlNode(){
if (pChildRoot != NULL)
{
delete pChildRoot;
pChildRoot = NULL;
}
if (pNextNode != NULL)
{
delete pNextNode;
pNextNode = NULL;
}
};
};
class CXmlDom
{
public:
CXmlDom(void);
~CXmlDom(void);
void AddRoot(const CString & rootName);
void AddNode(const CString & parentName, XmlNode * childNode);
BOOL Save(const CString & strFile);
BOOL FindSameNodeExsit(const CString &parentName, XmlNode * curNode);
protected:
XmlNode * m_pRootNode;
void DeleteNode(XmlNode * );
CString m_strIndentationUnit;
BOOL OutNode(HANDLE hFile, XmlNode * pParent, int level, char * ,char * , int & );
XmlNode * FindAddNodeParent(const CString & strName, XmlNode * pCurNode);
};
#include "StdAfx.h"
#include "XmlDom.h"
#include "Util.h"
CXmlDom::CXmlDom(void)
{
m_pRootNode = NULL;
m_strIndentationUnit = L" ";
}
CXmlDom::~CXmlDom(void)
{
if (m_pRootNode != NULL)
{
delete m_pRootNode;
}
}
// -------------------------------------------------------------------------
// RELEASE
// -------------------------------------------------------------------------
void CXmlDom::Delete