c 语言 xml 转结构体
时间: 2023-08-30 07:09:16 浏览: 340
c语言中的结构体
你可以使用开源的库来解析 XML 文件并将其转换为 C 语言的结构体。一个常用的库是 libxml2。
以下是一个简单的示例代码,演示如何使用 libxml2 解析 XML 文件并将其转换为结构体:
```c
#include <stdio.h>
#include <libxml/parser.h>
struct Person {
char name[50];
int age;
char address[100];
};
void parseXml(const char* xmlFile, struct Person* person) {
xmlDocPtr doc;
xmlNodePtr rootNode, node;
// 打开 XML 文件
doc = xmlReadFile(xmlFile, NULL, 0);
if (doc == NULL) {
printf("无法打开 XML 文件\n");
return;
}
// 获取根节点
rootNode = xmlDocGetRootElement(doc);
if (rootNode == NULL) {
printf("XML 文件为空\n");
xmlFreeDoc(doc);
return;
}
// 遍历子节点
for (node = rootNode->children; node != NULL; node = node->next) {
if (node->type == XML_ELEMENT_NODE) {
xmlChar* content = xmlNodeGetContent(node);
if (xmlStrcmp(node->name, (const xmlChar*)"name") == 0) {
snprintf(person->name, sizeof(person->name), "%s", content);
} else if (xmlStrcmp(node->name, (const xmlChar*)"age") == 0) {
person->age = atoi((const char*)content);
} else if (xmlStrcmp(node->name, (const xmlChar*)"address") == 0) {
snprintf(person->address, sizeof(person->address), "%s", content);
}
xmlFree(content);
}
}
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
}
int main() {
struct Person person;
parseXml("person.xml", &person);
printf("Name: %s\n", person.name);
printf("Age: %d\n", person.age);
printf("Address: %s\n", person.address);
return 0;
}
```
在上面的示例中,我们定义了一个名为 `Person` 的结构体,用于存储从 XML 文件中解析出的数据。`parseXml` 函数使用 libxml2 库来解析 XML 文件,并将解析结果保存到 `Person` 结构体中。
你需要根据你的 XML 文件的实际结构和字段名称来修改代码中的相关部分。
请注意,在使用 libxml2 库之前,你需要先安装它并在编译时链接该库。具体的安装和链接步骤根据你使用的操作系统和编译环境而定。
阅读全文