XML是一種常用的數據交換格式,在許多系統中都被廣泛采用。然而,在某些情況下,將XML轉換為JSON格式的文件更加方便和易于處理。那么,如何使用C語言將XML文件轉換為JSON格式呢?
首先需要引入libxml2庫,在程序中使用xmlReadFile函數將XML文件轉換為一個DOM文檔。然后,可以遍歷DOM文檔中的每一個節點,并將其轉換為JSON格式的對象。最后,再將JSON對象轉換為JSON格式的字符串,保存為文件即可。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <libxml/parser.h> #include <libxml/tree.h> #include <jansson.h> int main(int argc, char *argv[]) { xmlDocPtr doc; xmlNodePtr cur; const char *filename; json_t *root; if (argc< 2) { fprintf(stderr, "Usage: %s filename.xml\n", argv[0]); exit(1); } filename = argv[1]; /* Read the XML file into a DOM document */ doc = xmlReadFile(filename, NULL, XML_PARSE_NOBLANKS); if (doc == NULL) { fprintf(stderr, "Error: Unable to parse input file %s\n", filename); exit(1); } /* Traverse the DOM tree and convert to JSON object */ cur = xmlDocGetRootElement(doc); root = convert_node_to_json(cur); /* Convert JSON object to JSON string */ char *json_string = json_dumps(root, JSON_INDENT(2)); fprintf(stdout, "%s\n", json_string); /* Clean up */ xmlFreeDoc(doc); xmlCleanupParser(); json_decref(root); free(json_string); return 0; } /* Recursive function to convert XML nodes to JSON objects */ json_t *convert_node_to_json(xmlNodePtr node) { json_t *result; switch (node->type) { case XML_ELEMENT_NODE: /* Convert element attributes to JSON object */ result = json_object(); for (xmlAttrPtr attr = node->properties; attr != NULL; attr = attr->next) { json_object_set(result, (char *)attr->name, json_string((char *)attr->children->content)); } /* Convert child nodes */ for (xmlNodePtr child = node->children; child != NULL; child = child->next) { json_t *child_result = convert_node_to_json(child); if (json_is_array(result)) { json_array_append(result, child_result); } else { json_object_set(result, (char *)child->name, child_result); } } break; case XML_TEXT_NODE: /* Convert text content to JSON string */ result = json_string((char *)node->content); break; case XML_CDATA_SECTION_NODE: /* Convert CDATA content to JSON string */ result = json_string((char *)node->content); break; default: /* Ignore comment nodes and other node types */ result = NULL; break; } return result; }
以上代碼通過libxml2庫將XML文檔轉換為JSON格式的字符串,可將其保存為文件,方便后續的處理和使用。