在開發過程中,常常會遇到需要將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對象或數組。
上一篇mysql做數據庫的風險
下一篇mysql做網站數據庫