在日常工作中,我們常常需要將XML數據轉換成JSON格式。這時候,我們可以使用C語言編寫一個XML轉JSON的工具。
其中,需要用到libxml2庫,它是一款非常強大的XML解析器,在linux系統下十分流行。
#include#include #include #include void xml_to_json(xmlNode *node, json_t *json) { xmlNode *cur_node = NULL; json_t *tmp_json = NULL; for (cur_node = node; cur_node; cur_node = cur_node->next) { json_t *jobj = json_object(); if (cur_node->type == XML_ELEMENT_NODE) { tmp_json = json_string((const char *)cur_node->name); json_object_set(jobj, "name", tmp_json); if (cur_node->children != NULL) { tmp_json = json_object(); xml_to_json(cur_node->children, tmp_json); json_object_set(jobj, "children", tmp_json); } } else { if (cur_node->content != NULL) { tmp_json = json_string((const char *)cur_node->content); json_object_set(jobj, "value", tmp_json); } } json_array_append(json, jobj); } } int main(int argc, const char **argv) { xmlDoc *doc = NULL; xmlNode *root_element = NULL; char *filename = "sample.xml"; if (argc >1) { filename = (char *)argv[1]; } doc = xmlReadFile(filename, NULL, 0); if (doc == NULL) { printf("Could not parse xml file %s", filename); return 1; } root_element = xmlDocGetRootElement(doc); json_t *jroot = json_object(); xml_to_json(root_element, jroot); char *json_str = json_dumps(jroot, JSON_INDENT(4)); printf("%s", json_str); xmlFreeDoc(doc); return 0; }
上述代碼主要是使用了libxml2庫和jansson庫來實現XML轉JSON的功能。其中,xml_to_json函數是核心函數,它遞歸地將XML節點轉換為JSON對象,并將其存儲在json數組中。
最后,我們只需要將json數組轉換成JSON字符串即可。使用json_dumps函數可以將JSON對象轉換為JSON字符串。
以上就是使用C語言編寫XML轉JSON工具的實例,希望對大家有所幫助。
下一篇vue響應式彈窗