欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c xml轉換為json

錢諍諍2年前8瀏覽0評論

在開發過程中,常常會遇到需要將c語言中的xml文件轉換成json格式數據的需求。為了滿足這個需求,我們可以使用第三方庫libxml2和cJSON來實現xml到json的轉換。

首先,需要在代碼中引入libxml2和cJSON的頭文件:

#include <libxml/tree.h>
#include <libxml/parser.h>
#include <cJSON.h>

接著,可以編寫一個函數來實現xml轉換為json的功能:

void xml_to_json(xmlDocPtr doc, cJSON* root)
{
xmlNodePtr cur = NULL;
for (cur = xmlDocGetRootElement(doc); cur != NULL; cur = cur->next) {
if (cur->type == 1) { //節點
cJSON* node = cJSON_CreateObject();
cJSON_AddItemToObject(root, cur->name, node);
xmlAttrPtr attrs = cur->properties;
while (attrs) { //處理屬性
cJSON_AddStringToObject(node, attrs->name, (char*)attrs->children->content);
attrs = attrs->next;
}
if (cur->children) { //子節點
if (cur->children->next == NULL) { //單個子節點
cJSON_AddStringToObject(node, cur->children->name, (char*)cur->children->children->content);
} else { //多個子節點
cJSON* array = cJSON_CreateArray();
cJSON_AddItemToObject(node, cur->children->name, array);
xmlNodePtr child = NULL;
for (child = cur->children; child != NULL; child = child->next) {
cJSON* item = cJSON_CreateObject();
xml_to_json(xmlDocPtr(child), item);
cJSON_AddItemToArray(array, item);
}
}
} else { //內容
cJSON_AddStringToObject(node, "content", (char*)cur->children->content);
}
}
}
}

其中,第一個參數是指向xml文件的指針,第二個參數是cJSON的根節點指針。這個函數首先遍歷xml文件的所有節點和其屬性,對于每個節點,根據其子節點的個數將其轉換成一個對象或一個數組,然后將其添加到cJSON的根節點。

最后,我們可以在主函數中調用這個函數,將xml文件轉換成json格式。

int main(int argc, char** argv)
{
xmlDocPtr doc;
doc = xmlParseFile("data.xml");
if (doc == NULL) {
perror("xml file reading error\n");
exit(1);
}
cJSON* root = cJSON_CreateObject();
xml_to_json(doc, root);
char* json_str = cJSON_Print(root);
printf("json string:\n%s\n", json_str);
xmlFreeDoc(doc);
cJSON_Delete(root);
free(json_str);
return 0;
}

這個例子中,我們將一個名為data.xml的xml文件轉換成json格式,并將其打印出來。可以看到,xml文件中的每個節點和屬性都被轉換成了json對象或數組。