json转xml

#include    <stdio.h>
#include    <string.h>
#include    <stdlib.h>
#include    <sys/stat.h>

#include    <libxml/xmlmemory.h>
#include    <libxml/parser.h>

#include    "cJSON.h"

void json_loop(cJSON* json_root, xmlNodePtr xml_root)
{
    int        count, i;
    cJSON    *json_cur = json_root, *json_node;
    xmlNodePtr    xml_node;
    xmlNodePtr    xml_content;

    for(json_cur = json_root; json_cur; json_cur = json_cur->next)
    {
        count = cJSON_GetArraySize(json_cur);
        if(0 == count)
        {
            fprintf(stdout, "value:[%s]\n", json_cur->valuestring);
            xml_node = xmlNewNode(NULL, json_cur->string);
            xml_content = xmlNewText(json_cur->valuestring);
            xmlAddChild(xml_node, xml_content);
            xmlAddChild(xml_root, xml_node);
            continue;
        }
        else
        {
            if(NULL == json_cur->string)
                fprintf(stdout, "loop\n");
            else
            {
                xml_node = xmlNewNode(NULL, json_cur->string);
                json_loop(json_cur->child, xml_node);
                xmlAddChild(xml_root, xml_node);
            }
        }
    }
}

int main(int argc, char* argv[])
{
    char    filename[1024], line[1024], *data;
    FILE    *fp = NULL;
    struct    stat st;
    xmlDocPtr    xml_doc;
    xmlNodePtr    xml_root;    

    if(1 >= argc)
    {
        fprintf(stderr, "usage:%s filename\n", argv[0]);
        return -1;
    }
    memset(filename, 0, sizeof(filename));
    strcpy(filename, argv[1]);

    if(NULL == (fp = fopen(filename, "r")))
    {
        fprintf(stderr, "open file [%s] failed!\n", filename);
        return -1;
    }
    memset(&st, 0, sizeof(st));
    stat(filename, &st);
    data = (char*)malloc(st.st_size + 1);
    memset(data, 0, st.st_size + 1);
    memset(line, 0, sizeof(line));
    while(fgets(line, sizeof(line) - 1, fp))
    {
        strncpy(data + strlen(data), line, strlen(line));
        memset(line, 0, sizeof(line));
    }
    fclose(fp);

    cJSON    *json_root = cJSON_Parse(data);
    char    *json_data = cJSON_Print(json_root);
    fprintf(stdout, "JSON:\n%s\n", json_data);
    free(json_data);

    xmlBufferPtr    buff = xmlBufferCreate();
    xml_doc = xmlNewDoc(BAD_CAST"1.0");
    xml_root = xmlNewNode(NULL, json_root->child->string);
    fprintf(stdout, "xml_root:[%s]\n", xml_root->name);
    xmlDocSetRootElement(xml_doc, xml_root);
    json_loop(json_root->child->child, xml_root);        

    xmlChar*    dump;
    int            size;
    xmlDocDumpFormatMemory( xml_doc, &dump, &size, 1 );
    xmlBufferEmpty( buff );
    xmlBufferAdd( buff, dump, size );
    xmlFree( dump );
    fprintf(stdout, "-------------------------------------\n");
    fprintf(stdout, "XML:\n%s\n", xmlBufferContent(buff));
    xmlBufferFree(buff);
    xmlFreeDoc(xml_doc);

    cJSON_Delete(json_root);
    return 0;

}

问题:JSON中的循环节点如何处理?

时间: 2024-07-31 14:31:23

json转xml的相关文章

JSON&#160;和&#160;XML&#160;优缺点的比较

JSON 和 XML 优缺点的比较 1.JSON定义(JavaScript Object Notation) 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. 2.XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XM

JSON与XML的区别比较

(1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;?格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用程序或供应商

转 JSON与XML转换

这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法,xml2Json()和json2Xml(),主要的问题就出在这两个方法的具体实现上.XML与JSON相互转换的Java类在org.json.*包中常用的有XML.java和JSONML.java,前一半时间花在了json格式与XML生成格式的验证上,json数据串格式没有错,只是在转换的时候需要在

JSON和XML

n网络 JSON和XML niOS学院 n李明杰 nJSON n什么是JSON pJSON是一种轻量级的数据格式,一般用于数据交互 p服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) p nJSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim

iOS开发——网络Swift篇&amp;JSON与XML数据解析

JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其他第三方开源项目高. NSJSONSerialization能将JSON转换成Foundation对象,也能将Foundation对象转换成JSON,但转换成JSON的对象必须具有如下属性

JSON-lib框架,转换JSON、XML不再困难

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作    1. 首先要去官方下载json-lib工具包 下载地址: http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/ 目前最新的是2.4的版本,本示例中使用的是v2.3:json-lib还需要以下依赖包: jak

iOS-数据持久化基础-JSON与XML数据解析

解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.XML数据结构 解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 XML数据结构 XML解析SAX?方式解析从上往下,?一点?一点读取性能好苹果推荐使?用DO

JSON和XML的关系

0.题外话 我相信任何一个和web打交道的程序员(尤其是前端工程师们),在初次与XML邂逅时,是完全不明白它是干嘛的.而又到了后来被安排与JSON相亲时,也是糊里糊涂的. 什么,不对么?好吧,至少,上文是我自己的亲身经历.在我实习时参与的第二个项目中,我被要求使用异步请求向服务器拿取一段JSON数据.通过浏览器的控制台,我查看服务器返回的结果,我还记得,那一刻我心中惊呼“what's that crap”. 而对于异步请求,那时候我只懂得单纯地使用jQuery库的$.ajax()方法,而到后来,

网络json 和xml 接口

免费JSON格式的服务接口 各种常用的JSON接口 网络json 和xml 接口,码迷,mamicode.com

JSON 和 XML的类比

JSON和XML的类比 (1).XML的优缺点 <1>.XML的优点 A.格式统一,符合标准: B.容易与其他系统进行远程交互,数据共享比较方便. <2>.XML的缺点 A.XML文件庞大,文件格式复杂,传输占带宽: B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护: C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码: D.服务器端和客户端解析XML花费较多的资源和时间. (2).JSON的优缺点<1>