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.shnenglu.com/Files/jimsmorong/quickfile.rar