XML(可擴展標記語言)和JSON(JavaScript對象表示法)是目前流行的兩種數據格式。XML是一種通用的標記語言,用于描述數據。JSON是一種輕量級的數據格式,用于表示結構化數據。在開發過程中,時常需要將XML數據轉換為JSON格式,這樣可以更輕松地在基于Web的應用程序中使用這些數據。以下是將C中的XML數據轉換為JSON格式的示例。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <libxml/parser.h> #include <libxml/tree.h> #include <json-c/json.h> int main(int argc, char *argv[]) { // XML數據字符串 char *xml_data = "<book><title>Harry Potter</title><author>J.K. Rowling</author></book>"; // XML解析 xmlDocPtr doc = xmlReadMemory(xml_data, strlen(xml_data), NULL, NULL, 0); xmlNodePtr root = xmlDocGetRootElement(doc); // 創建JSON對象 struct json_object *json_obj = json_object_new_object(); // 遍歷XML節點并轉換為JSON xmlNodePtr cur_node = root->xmlChildrenNode; while (cur_node != NULL) { if (cur_node->type == XML_ELEMENT_NODE) { char *key = (char *)xmlGetProp(cur_node, (const xmlChar *)"name"); char *value = (char *)xmlNodeGetContent(cur_node); struct json_object *json_value = json_object_new_string(value); json_object_object_add(json_obj, key, json_value); } cur_node = cur_node->next; } // 輸出JSON字符串 const char *json_str = json_object_to_json_string(json_obj); printf("JSON:\n%s\n", json_str); // 釋放內存 json_object_put(json_obj); xmlFreeDoc(doc); return 0; }
以上代碼使用libxml2和json-c庫將XML數據轉換為JSON格式。首先,使用xmlReadMemory函數將XML數據加載到內存中,并使用xmlDocGetRootElement函數獲取根節點。接下來,在while循環中遍歷所有XML節點,并將其轉換為JSON對象。最后,將JSON對象轉換為JSON字符串并輸出。