在使用C語言進行編碼時,將XML格式轉(zhuǎn)換為JSON格式是一個常見的需求。以下是一個簡單的示例,展示了如何在C語言中使用函數(shù)將XML格式轉(zhuǎn)換為JSON格式。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<libxml/parser.h> #include<libxml/tree.h> #include<cJSON.h> /** * 解析XML節(jié)點并將其轉(zhuǎn)換為JSON對象。 */ cJSON* parseXML(xmlNodePtr node) { cJSON* obj = cJSON_CreateObject(); // 創(chuàng)建JSON對象 xmlNodePtr curNode = NULL; // 定義XML節(jié)點 char* value = NULL; // 定義值字符串 // 循環(huán)遍歷XML節(jié)點 for (curNode = node->xmlChildrenNode; curNode != NULL; curNode = curNode->next) { if (curNode->type == XML_ELEMENT_NODE) { value = (char*)xmlNodeGetContent(curNode); // 取得節(jié)點的值 // 將XML節(jié)點轉(zhuǎn)換為JSON對象的鍵值對 cJSON_AddItemToObject(obj, (char*)curNode->name, cJSON_CreateString(value)); xmlFree(value); // 釋放值字符串的內(nèi)存 } } return obj; } /** * 解析XML格式的字符串。 */ cJSON* xmlToJson(char* xmlData) { xmlDocPtr doc = NULL; // 定義XML文檔 xmlNodePtr rootNode = NULL; // 定義XML根節(jié)點 cJSON* rootObj = NULL; // 定義JSON根對象 doc = xmlReadMemory(xmlData, strlen(xmlData), NULL, NULL, 0); // 讀取XML字符串 if (doc == NULL) { fprintf(stderr, "Failed to parse document\n"); // 如果XML解析失敗,輸出錯誤信息 return NULL; } rootNode = xmlDocGetRootElement(doc); // 獲取XML文檔的根節(jié)點 rootObj = parseXML(rootNode); // 將根節(jié)點轉(zhuǎn)換為JSON對象 xmlFreeDoc(doc); // 釋放XML文檔 xmlCleanupParser(); // 清空XML解析器 return rootObj; } int main() { char* xmlData = "<root><name>Tom</name><age>18</age></root>"; // 將XML格式字符串轉(zhuǎn)換成JSON格式字符串 cJSON* jsonObj = xmlToJson(xmlData); // 輸出JSON格式字符串 if (jsonObj != NULL) { char* jsonStr = cJSON_Print(jsonObj); printf("%s\n", jsonStr); free(jsonStr); // 釋放JSON字符串的內(nèi)存 } return 0; }
在上面的示例中,我們使用了libxml2庫來解析XML格式的字符串,并使用cJSON庫來創(chuàng)建JSON對象和將JSON對象轉(zhuǎn)換為字符串。通過這種方式,我們可以快速地將XML格式轉(zhuǎn)換為JSON格式,并且可以方便地在C語言中進行處理。