xml转json C
时间: 2023-07-30 21:08:31 浏览: 50
要将XML转换为JSON,可以使用各种编程语言中的XML解析库和JSON库。以下是一个使用C语言的示例代码,使用libxml2库解析XML并使用cJSON库将其转换为JSON:
```c
#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <cjson/cJSON.h>
void convertXmlToJson(xmlNode *node, cJSON *json);
int main() {
// 读取XML文件
xmlDoc *doc = xmlReadFile("input.xml", NULL, 0);
if (doc == NULL) {
printf("Failed to parse XML file.\n");
return 1;
}
// 获取根节点
xmlNode *root = xmlDocGetRootElement(doc);
// 创建一个空的JSON对象
cJSON *json = cJSON_CreateObject();
// 将XML转换为JSON
convertXmlToJson(root, json);
// 将JSON对象转换为字符串
char *jsonStr = cJSON_Print(json);
// 输出JSON字符串
printf("%s\n", jsonStr);
// 释放资源
free(jsonStr);
cJSON_Delete(json);
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
void convertXmlToJson(xmlNode *node, cJSON *json) {
xmlNode *curNode = NULL;
cJSON *jsonArray = NULL;
cJSON *jsonSubObj = NULL;
for (curNode = node; curNode != NULL; curNode = curNode->next) {
if (curNode->type == XML_ELEMENT_NODE) {
if (curNode->children != NULL && curNode->children->type == XML_ELEMENT_NODE) {
// 子节点是元素节点,创建一个JSON对象,并将其添加到父JSON对象中
jsonSubObj = cJSON_CreateObject();
cJSON_AddItemToObject(json, (const char *) curNode->name, jsonSubObj);
convertXmlToJson(curNode->children, jsonSubObj);
} else {
// 子节点是文本节点,将其值添加到父JSON对象中
cJSON_AddItemToObject(json, (const char *) curNode->name,
cJSON_CreateString((const char *) curNode->children->content));
}
} else if (curNode->type == XML_TEXT_NODE) {
// 当前节点是文本节点,将其值添加到父JSON对象中
cJSON_AddItemToObject(json, "text", cJSON_CreateString((const char *) curNode->content));
}
// 处理子节点
if (curNode->children != NULL) {
convertXmlToJson(curNode->children, json);
}
}
}
```
请注意,这只是一个示例代码,你需要根据实际情况进行适当的调整和错误处理。你还需要安装libxml2和cJSON库,并将`input.xml`替换为你要转换的XML文件路径。
希望这可以帮助到你!