读取JSON字符串,转为XML文件(二)

      在做WEB后端开发的时候,会用到XML来传输数据。客户端发送请求(XML)到服务器,服务器又反馈信息(XML)到客户端。在这个过程中,会涉及到读取JSON字符串打包成XML,以及解析XML成JSON字符串给前端使用。现在贴出解析JSON字符串成为XML文档的代码。

   test.c

   

#include<stdio.h>
#include<stdlib.h>
#include "json.h"
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

//添加节点到XML
void AddNodeToXml(xmlDocPtr doc,xmlNodePtr item, char *key,char *val)
{
	xmlNodePtr ponet = xmlNewTextChild(item,NULL,(xmlChar*)key,(xmlChar*) val);
}

//关闭文档
void CloseXml(xmlDocPtr doc)
{
	xmlSaveFormatFileEnc("ho.xml",doc,"UTF-8",1);
	xmlFreeDoc(doc);
}

void test()
{
	int i = 0;
	int iLength = 0;

	json_object* my_array = json_object_new_array();
	json_object* my_obj1 = json_object_new_object();
	json_object* my_obj2 = json_object_new_object();
	json_object* my_obj3 = json_object_new_object();

	json_object_object_add(my_obj1,"item1",json_object_new_int(1));
	json_object_object_add(my_obj1,"item2", json_object_new_int(2));
	json_object_object_add(my_obj1, "item3",json_object_new_int(3));
	json_object_object_add(my_obj1,"item4", json_object_new_int(6));

	json_object_object_add(my_obj2,"item5", json_object_new_int(1));
	json_object_object_add(my_obj2,"item6", json_object_new_int(2));
	json_object_object_add(my_obj2, "item7",json_object_new_int(3));
	json_object_object_add(my_obj2,"item8", json_object_new_int(6));

	json_object_object_add(my_obj3,"item9", json_object_new_int(7));
	json_object_object_add(my_obj3,"item10", json_object_new_int(8));
	json_object_object_add(my_obj3, "item11",json_object_new_int(9));
	json_object_object_add(my_obj3,"item12", json_object_new_int(10));

	json_object_array_add(my_array,my_obj1);
	json_object_array_add(my_array,my_obj2);
	json_object_array_add(my_array,my_obj3);
	printf("%s\n", json_object_to_json_string(my_array));

	//从数组中读取JSON对象
	iLength = json_object_array_length(my_array);

	//分配对象用来保存数组中的对象
	json_object* obj[iLength];
	for(i = 0;i < iLength;i++)
	{
		obj[i] = json_object_new_object();
	}
	// 建立XML文件
	xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
	xmlNodePtr pRoot = xmlNewNode(NULL,BAD_CAST"data");
	xmlDocSetRootElement(doc,pRoot);

	//遍历出数组中到对象
	for(i = 0;i < iLength;i++)
	{
		xmlNodePtr item = xmlNewTextChild(pRoot,NULL,BAD_CAST"item",NULL);
		obj[i] = json_object_array_get_idx(my_array,i);
		printf("obj[%d] = %s\n",i,json_object_to_json_string(obj[i]));
		//添加节点到XML文件中
		json_object_object_foreach(obj[i],key,val)
		{
			AddNodeToXml(doc,item,key,json_object_to_json_string(val));
		}
	}
	CloseXml(doc);
}

int main()
{
	test();
}

运行结果:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <item>
    <item1>1</item1>
    <item2>2</item2>
    <item3>3</item3>
    <item4>6</item4>
  </item>
  <item>
    <item5>1</item5>
    <item6>2</item6>
    <item7>3</item7>
    <item8>6</item8>
  </item>
  <item>
    <item91>71</item91>
    <item101>81</item101>
    <item111>91</item111>
    <item121>101</item121>
  </item>
</data>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值