LINUX.ORG.RU

Работа с XML на Си


0

0

Где найти хорошую (и понятную) документацию по работе с XML на Linux (libxml2, DOM и пр.)? Мне нужно из <AAA BBB="CCC" DDD="FFF"> вычленить CCC, зная AAA и BBB. Я конечно могу использовать fscanf, но хотелось бы воспользоваться более современными средствами.

P.S. Желательно придерживаться библиотек Gnome

★★

Например так:

#include <libxml/xpath.h>

void parse_lab_config(xmlNodePtr item) {
if(strcmp((const char*) item->name, "AAA") != 0)
fprintf(stderr,"Все плохо\n");
printf("BBB = %s\n",xmlGetProp(item, (const xmlChar*) "BBB"));
}

void load_config(string URL) {
xmlDocPtr document = NULL;
xmlNodePtr root = NULL;

xmlDoValidityCheckingDefaultValue = 0;
document = xmlReadFile(URL.c_str(), NULL, XML_PARSE_COMPACT);

if (document == NULL) {
fprintf(stderr,"Failed to load config\n");
xmlCleanupParser();
return;
}
root = xmlDocGetRootElement(document);

parse_config(root);

if (document != NULL)
xmlFreeDoc(document);
xmlCleanupParser();
}

Компилить: gcc `pkg-config --cflags --libs libxml-2.0` file.c

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

Для начала попробовал скомпилировать без изменений, но:

xsample.c:9: error: syntax error before "URL"
xsample.c: In function `load_config':
xsample.c:14: error: `URL' undeclared (first use in this function)
xsample.c:14: error: (Each undeclared identifier is reported only once
xsample.c:14: error: for each function it appears in.)
xsample.c:14: error: `XML_PARSE_COMPACT' undeclared (first use in this function)

xTERM ★★
() автор топика
Ответ на: комментарий от xTERM

#include <libxml/xpath.h>

void parse_lab_config(xmlNodePtr item) {
if(strcmp((const char*) item->name, "AAA") != 0)
fprintf(stderr,"Все плохо\n");
printf("BBB = %s\n",xmlGetProp(item, (const xmlChar*) "BBB"));
}

void load_config(const char* URL) {
xmlDocPtr document = NULL;
xmlNodePtr root = NULL;

xmlDoValidityCheckingDefaultValue = 0;
document = xmlReadFile(URL, NULL, 0);

if (document == NULL) {
fprintf(stderr,"Failed to load config\n");
xmlCleanupParser();
return;
}
root = xmlDocGetRootElement(document);

parse_config(root);

if (document != NULL)
xmlFreeDoc(document);
xmlCleanupParser();
}

Так должно полегчать =)

Я просто использовал плюсовый string.

YesSSS ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.