tinyxml 做个N层结构的配置文件
算法
当然差 FOR FOR两个循环
但不用这个又好似破坏OO的感觉
一般来讲tinyxml做解析xml配置文件都是结点指针顺住落去的
例如notepad++里的
我是本着不负责的心发表的
/************************************************************************/
/*作者:jimsmorong
版本:V0。
日期::47 2008/5/5
/************************************************************************/
#include "tinyxml.h"
class DKTinyXmlConfigFile
{
public:
DKTinyXmlConfigFile():pFilename(0),tixmldoc(0),deep(0),Findwhere(0){}
DKTinyXmlConfigFile(char
*pFilename):pFilename(0),tixmldoc(0),deep(0),Findwhere(0)
{
TiXmlDocument* doc
= new TiXmlDocument(pFilename);
bool loadOkay = doc->LoadFile();
tixmldoc = doc;
}
~DKTinyXmlConfigFile(){}
bool SetVaule(char
*vaule)
{
TiXmlText newText(vaule);
Findwhere->ToElement()->ReplaceChild(Findwhere->ToElement()->FirstChild(),newText);
tixmldoc->SaveFile();
deep = 0;
Findwhere = 0;
return 1;
}
const char *GetVaule()
{
const char *temp = Findwhere->ToElement()->GetText();
deep = 0;
Findwhere = 0;
return temp;
}
DKTinyXmlConfigFile* Find(char *vaule)
{
if (deep == 0)
{
//获取根节点
Findwhere = tixmldoc->RootElement();
}
//循环获取Findwhere节点下面的节点
for(TiXmlNode*
child = Findwhere->FirstChild();
child;
child=child->NextSibling())
{
//判断为元素类型并且是staticbox元素,Value()获取该标签的名称
if((child->Type() == TiXmlNode::ELEMENT) && (!strcmp(child->Value(),vaule)))
{
deep++;
Findwhere = child;
return (DKTinyXmlConfigFile *)(this);
}
else
return 0;
}
}
protected:
private:
char * pFilename;
TiXmlDocument *tixmldoc;
int deep;
TiXmlNode* Findwhere;
};
/*CPP
DKTinyXmlConfigFile
dkxml("test.xml");
//设置和得到在B下的C里的D 参数都是char *vaule
dkxml.Find("b")->Find("c")->SetVaule("ddddddFFFFddddd");
CString a(
dkxml.Find("b")->Find("c")->GetVaule());
//xml
那个A是不分析的
<?xml
version="1.0" encoding="utf-8" ?>
<a>
<b>
<c>ddddddFFFFddddd</c>
</b>
</a>
*/
下载http://www.cppblog.com/Files/jimsmorong/quickfile.rar