TinyXML應用例子

weixin_34304013發表於2007-11-10

開發軟體時經常需要把一些東西做成可配置的,於是就需要用到配置檔案,以前多是用ini檔案,然後自己寫個類來解析。現在有了XML,許多應用軟體就喜歡把配置檔案做成XML格式。但是如果我們的程式本身很小,為了讀取個配置檔案卻去用Xerces XML之類的庫,恐怕會得不償失。那麼用TinyXML吧,它很小,只有六個檔案,加到專案中就可以開始我們的配置檔案之旅了。

前些時候我恰好就用TinyXML寫了一個比較通用的配置檔案類,基本可以適應大部分的場合,不過配置檔案只支援兩層結構,如果需要支援多層巢狀結構,那還需要稍加擴充套件一下。

從下面的原始碼中,你也可以看到怎麼去使用TinyXML,也算是它的一個應用例子了。

 

/*
** FileName:    config.h
** Author:        hansen
** Date:        May 11, 2007
** Comment:        配置檔案類,主要用來讀取xml配置檔案中的一些配置資訊
*/

 
#ifndef _CONFIG
#define _CONFIG
 
#include <string>
#include "tinyxml.h"
 
using namespace std;
 
class CConfig
{
public:
    explicit CConfig(const char* xmlFileName)
        :mXmlConfigFile(xmlFileName),mRootElem(0)
    {
        //載入配置檔案
        mXmlConfigFile.LoadFile();    
        
        //得到配置檔案的根結點
        mRootElem=mXmlConfigFile.RootElement();
    }
 
public:
    //得到nodeName結點的值
    string GetValue(const string& nodeName);
 
private:
    //禁止預設建構函式被呼叫
    CMmsConfig();
 
private:
    TiXmlDocument    mXmlConfigFile;
    TiXmlElement*    mRootElem;
 
};
 
#endif

 

 

/*
** FileName:    config.cpp
** Author:        hansen
** Date:        May 11, 2007
** Comment:        
*/

 
#include "config.h"
#include <iostream>
 
string CConfig::GetValue(const string& nodeName)
{
    if(!mRootElem)
    {
        cout<<"讀取根結點出錯"<<endl;
        return "";
    }
 
    TiXmlElement* pElem=mRootElem->FirstChildElement(nodeName.c_str());
    if(!pElem)
    {
        cout<<"讀取"<<nodeName<<"結點出錯"<<endl;
        return "";
    }
 
    return pElem->GetText();
 
}
 
 
int main()
{
    CConfig xmlConfig("XmlConfig.xml");
 
    //獲取Author的值
    string author = xmlConfig.GetValue("Author");
    cout<<"Author:"<<author<<endl;
 
    //獲取Site的值
    string site = xmlConfig.GetValue("Site");
    cout<<"Site:"<<site<<endl;
 
    //獲取Desc的值
    string desc = xmlConfig.GetValue("Desc");
    cout<<"Desc:"<<desc<<endl;
    
    return 0;
}

 

假設配置檔案是這樣的:

<!– XmlConfig.xml –> 
<?xml version="1.0" encoding="GB2312" ?>
<Config>
    <Author>hansen</Author>
    <Site>www.hansencode.cn</Site>
    <Desc>這是個測試程式</Desc>
</Config>

 

怎麼使用上面的配置類來讀取XmlConfig.xml檔案中的配置呢?很簡單:

int main()
{
    CConfig xmlConfig("XmlConfig.xml");
 
    //獲取Author的值
    string author = xmlConfig.GetValue("Author");
    cout<<"Author:"<<author<<endl;
 
    //獲取Site的值
    string site = xmlConfig.GetValue("Site");
    cout<<"Site:"<<site<<endl;
 
    //獲取Desc的值
    string desc = xmlConfig.GetValue("Desc");
    cout<<"Desc:"<<desc<<endl;
    
    return 0;
}

 

執行結果如下:

D:\config\Debug>config.exe
Author:hansen
Site:www.hansencode.cn
Desc:這是個測試程式

 

相關文章