c是一種高級(jí)編程語(yǔ)言,操作靈活、性能高,可以用于各種常見計(jì)算任務(wù),其中包括將xml格式轉(zhuǎn)化為json格式。要在c中實(shí)現(xiàn)這個(gè)操作,我們可以使用常見的xml和json格式庫(kù)。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <libxml/xmlmemory.h> #include <libxml/parser.h> #include <json-c/json.h> // 將xml結(jié)構(gòu)體轉(zhuǎn)化為json結(jié)構(gòu)體 json_object* json_from_xml(xmlNode *node) { json_object *new_object = json_object_new_object(); for(xmlNode *n = node->children; n; n = n->next) { if(n->type == XML_ELEMENT_NODE) { char *node_name = (char*)n->name; json_object *obj; if(n->children && n->children->type == XML_ELEMENT_NODE) { obj = json_from_xml(n); } else if(n->children) { obj = json_object_new_string((char*)n->children->content); } else { obj = json_object_new_string(""); } json_object_object_add(new_object, node_name, obj); } } return new_object; } // 將xml字符串轉(zhuǎn)化為json字符串 char* json_from_xml_string(char *xml_string) { xmlDoc *doc = xmlReadMemory(xml_string, strlen(xml_string), "noname.xml", NULL, 0); if(doc == NULL) { fprintf(stderr, "Failed to parse document\n"); return NULL; } xmlNode *root = xmlDocGetRootElement(doc); json_object *result = json_from_xml(root); xmlFreeDoc(doc); xmlCleanupParser(); return strdup(json_object_to_json_string(result)); } int main(void) { char *xml_string = ""; char *json_string = json_from_xml_string(xml_string); printf("%s\n", json_string); free(json_string); return 0; } Tom 20
以上代碼將以xml格式的字符串作為輸入,然后使用libxml2庫(kù),將它轉(zhuǎn)化為一個(gè)xml結(jié)構(gòu)體。接下來(lái),我們使用json-c庫(kù)將xml結(jié)構(gòu)體轉(zhuǎn)化為一個(gè)json結(jié)構(gòu)體。在這個(gè)過(guò)程中,我們從根節(jié)點(diǎn)開始,遍歷xml樹形結(jié)構(gòu),進(jìn)行遞歸操作,每次將當(dāng)前xml節(jié)點(diǎn)轉(zhuǎn)化為一個(gè)json對(duì)象,并以當(dāng)前節(jié)點(diǎn)的名稱將其添加至父節(jié)點(diǎn)的json對(duì)象中。最后,我們使用json_object_to_json_string函數(shù),將json結(jié)構(gòu)體轉(zhuǎn)化為json格式的字符串。
在這個(gè)例子中,使用xml作為輸入格式,但我們可以使用類似的方法,使用其他格式,如yaml、csv或tsv作為輸入,并將其轉(zhuǎn)化為json格式。