Использование XML-файлов конфигурации - простые подходы сопоставления? - PullRequest
3 голосов
/ 14 сентября 2011

Я пишу простой физический движок и хочу включить некоторые конфигурационные файлы.

Когда я смотрю на 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, который читает файлы xml в деревья, используя libxml2. Как люди обычно заполняют такую ​​структуру данных?

Я не прошу альтернативы 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
}

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

Возможно, вы захотите взглянуть на libconfig .В вашем случае такой файл конфигурации будет:

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

Библиотека Boost довольно велика в некоторых дистрибутивах (например, Debian).

1 голос
/ 14 сентября 2011

Если вам нужен только файл конфигурации и не обязательно XML, взгляните на Параметры программы Boost

Прост и удобен в использовании. Используется формат файла .ini.

Пример файла .ini:

[info]
name=something
x=0
y=0
0 голосов
/ 14 сентября 2011

Я использую одни и те же вещи таким же образом, но я использую libmxml библиотека ... это очень просто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...