XML是一種常見(jiàn)的數(shù)據(jù)格式,但是很多時(shí)候我們需要將其轉(zhuǎn)化為JSON格式以便于前后端的數(shù)據(jù)傳輸。在C語(yǔ)言中,我們可以采用第三方庫(kù)libxml2來(lái)進(jìn)行XML的解析和JSON的生成。
//加載XML文件 xmlDocPtr doc = xmlReadFile("example.xml", NULL, 0); if (doc == NULL) { printf("Error: failed to parse file."); return; } //獲取root節(jié)點(diǎn) xmlNodePtr root = xmlDocGetRootElement(doc); //定義JSON對(duì)象 json_object *json = json_object_new_object(); //遞歸解析XML節(jié)點(diǎn) xmlNodePtr node = root; traverse(node, json); printf("JSON: %s\n", json_object_to_json_string(json)); //釋放資源 xmlFreeDoc(doc); json_object_put(json);
其中,traverse函數(shù)是一個(gè)遞歸函數(shù),用于將XML節(jié)點(diǎn)轉(zhuǎn)化為JSON對(duì)象。具體實(shí)現(xiàn)如下:
void traverse(xmlNodePtr node, json_object *json) { xmlNodePtr child = NULL; for (child = node->children; child != NULL; child = child->next) { if (child->type == XML_ELEMENT_NODE) { //如果是元素節(jié)點(diǎn),創(chuàng)建一個(gè)新的JSON對(duì)象,將其加入到父節(jié)點(diǎn)中 json_object *new_json = json_object_new_object(); json_object_object_add(json, (char *)child->name, new_json); traverse(child, new_json); } else if (child->type == XML_TEXT_NODE) { //如果是文本節(jié)點(diǎn),將其值作為一個(gè)字符串屬性加入到父節(jié)點(diǎn)中 char *value = (char *)xmlNodeListGetString(node->doc, child->xmlChildrenNode, 1); json_object_object_add(json, (char *)"value", json_object_new_string(value)); } } }
通過(guò)以上代碼,我們可以將XML文件解析為JSON格式,方便前后端數(shù)據(jù)的傳輸和利用。