在做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>