2011-09-14 62 views
3

我正在寫一個簡單的物理引擎,我想包括某種形式的配置文件。使用xml配置文件 - 簡單的映射方法?

當我看着xml,樹結構對我來說很有意義,並且看着libxml,它似乎很容易閱讀和修改。

我遇到的問題是我可能會如何提示它。

我的應用程序是用C編寫的,有沒有實現xml配置文件的標準約定?

爲了論點的緣故,我將設置一個示例環境。比方說,我有一個名爲foo.c的一個數據結構,看起來像這樣的文件:

typedef struct { 
    char* name; 
    float x; 
    float y; 
}info; 

和一個配置文件名爲foo.xml看起來像

<info> 
    <name>something</name> 
    <x>0</x> 
    <y>0</y> 
</info> 

和另一個類bar.c那使用libxml2將xml文件讀取到樹中。人們通常會如何填充這樣的數據結構?

我不要求替代XML

例如答案(這是我一直在思考,但我不知道這是貫徹落實正確的方式)。

bar.c具有功能:

tree* load_config(FILE* config_file); 
char[][] get_fields(tree* current_tree); 

你調用該函數,它返回一個樹,然後你有一個像一堆條件句:

tree* current_tree = load_config(fopen("foo.xml")); 
char[][] fields = get_fields(current_tree); 

if(contains(fields, "name")) { 
    name = current_tree->name; //i'd have to navigate through the tree to find name or something 
} 

回答

1

如果你只需要配置文件並不一定是XML,請看看Boost Program Options

它簡單易用。它使用.ini文件的格式。 .ini文件的

例子:

[info] 
name=something 
x=0 
y=0 
+0

我沒有要求替代方案... – Newbie

+1

但他們可能會更好。 XML並不是很複雜,但是它的解析和處理比聽起來像你需要的要稍微重一點。 –

0

我用同樣的方式,同樣的事情,但我使用libmxml圖書館......它非常簡單

1

你可能想看看libconfig。在你的情況下,這樣一個配置文件將是:

info { 
    name = something; 
    x = 0; 
    y = 0; 
}; 

Boost庫是在一些發行版(如Debian)相當大。