c语言环境下的xml数据的序列化的过程以机顶盒向手机APK发送数据为例
来源:互联网 发布:淘宝网店手机实名认证 编辑:程序博客网 时间:2024/05/29 06:32
机顶盒向手机apk端发送xml格式的数据流程如下所示:
1.调用函数 (1) send_xml_data_to _mobile() ;
2.在函数(1)中调用函数(2)send_common_data_to_mobile();
3.在函数(2)中调用函数(3)create_xml_buff(),并向函数传递了三个重要的参数,分别是压缩前的xml数据缓存xml_send_buff_before_compress,和一个结构体xml_root,以及xml_type;
4.在函数(3)中分情况讨论,调用不同的方法创建携带不同信息的xml文件;
在该项目中携带不同数据信息的xml文件的生成主要通过使用libxml2所携带的库函数完成xml文件的创建
以创建频道节目列表为例:
static BOOL create_channel_list_xml(char *result_buffer, void * buf){xmlTextWriterPtr writer;int rc;int program_index = 0, j;char str[GMS_MAX_BYTE_LENGTH_SERVICE_NAME];char buff[GMS_MAX_BYTE_LENGTH_SERVICE_NAME];GS_CHANNEL_LIST* channel_list = buf;int prog_num;GMS_PROGRAM_INFO * xml_array;xmlBufferPtr xml_buf = NULL;if (result_buffer == NULL){return FALSE;}prog_num = channel_list->request_program_num;xml_array = channel_list->program_list;xml_buf = xmlBufferCreateSize(PROGRAM_SMALL_XML_BUFF_LENGTH);if (xml_buf == NULL){return FALSE;}LIBXML_TEST_VERSIONwriter = xmlNewTextWriterMemory(xml_buf, 0);if (writer == NULL){printf("testXmlwriterFilename: Error creating the xml writer\n");return FALSE;}rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");xmlFreeTextWriter(writer);return FALSE;}//Commandrc = xmlTextWriterStartElement(writer, BAD_CAST "Command");if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");xmlFreeTextWriter(writer);return FALSE;}for (program_index = 0; program_index < prog_num; program_index++){//parmrc = xmlTextWriterStartElement(writer, BAD_CAST "parm");if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterStartElement\n");xmlFreeTextWriter(writer);return FALSE;}//ProgramIdrc = xmlTextWriterWriteElement(writer, BAD_CAST "ProgramId", BAD_CAST xml_array[program_index].prog_sat_tp_id);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteFormatElement\n");xmlFreeTextWriter(writer);return FALSE;}//ProgramNameconvert_windows_to_utf8(xml_array[program_index].prog_name, xml_array[program_index].prog_name, sizeof(xml_array[program_index].prog_name), -1);rc = xmlTextWriterWriteElement(writer, BAD_CAST "ProgramName", BAD_CAST xml_array[program_index].prog_name);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//ProgamIndexrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ProgramIndex", "%d", xml_array[program_index].prog_index);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//SatName//rc = xmlTextWriterWriteElement(writer, BAD_CAST "SatName", BAD_CAST xml_array[i].sat_name);//if (rc < 0)//{//printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);//xmlFreeTextWriter(writer);//return FALSE;//}//ProgramTyperc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ProgramType", "%d", xml_array[program_index].is_scramble);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//Is HD channelrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "IsProgramHD", "%d", xml_array[program_index].is_hd);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//FavMarkrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "FavMark", "%d", xml_array[program_index].fav_mark);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//LockMarkrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "LockMark", "%d", xml_array[program_index].lock_mark);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//haveEPGrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HaveEPG", "%d", xml_array[program_index].have_epg);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//is_playingrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "IsPlaying", "%d", xml_array[program_index].is_playing);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//will_be_playedrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "WillBePlayed", "%d", xml_array[program_index].will_be_played);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//CurChannelTyperc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ChannelType", "%d", xml_array[program_index].channel_type);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}////freq//rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "Frequency", "%d", xml_array[i].freq);//if (rc < 0)//{//printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);//xmlFreeTextWriter(writer);//return FALSE;//}//////pol//rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "Polar", "%d", xml_array[i].pol);//if (rc < 0)//{//printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);//xmlFreeTextWriter(writer);//return FALSE;//}//modulation_sysrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ModulationSystem", "%d", xml_array[program_index].modulation_sys);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//modulation_typerc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ModulationType", "%d", xml_array[program_index].modulation_type);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//roll_offrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "RollOff", "%d", xml_array[program_index].roll_off);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//pilot_tonesrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "PilotTones", "%d", xml_array[program_index].pilot_tones);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}////sym_rate//rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "SymbolRate", "%d", xml_array[i].sym_rate);//if (rc < 0)//{//printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);//xmlFreeTextWriter(writer);//return FALSE;//}//////fec//rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "Fec", "%d", xml_array[i].fec);//if (rc < 0)//{//printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);//xmlFreeTextWriter(writer);//return FALSE;//}//video_pidrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "VideoPid", "%d", xml_array[program_index].video_pid);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//audio_pidmemset(str, 0x00, GMS_MAX_BYTE_LENGTH_SERVICE_NAME);for (j = 0; j < xml_array[program_index].audio_pid_num; j++){if (j > 0){string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, ",");itoa(xml_array[program_index].audio_pid[j], buff, 10);string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, buff);}else{itoa(xml_array[program_index].audio_pid[j], buff, 10);string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, buff);}}rc = xmlTextWriterWriteElement(writer, BAD_CAST "AudioPid", BAD_CAST str);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//ttx_pidrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "TtxPid", "%d", xml_array[program_index].ttx_pid);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//sub_pidmemset(str, 0x00, GMS_MAX_BYTE_LENGTH_SERVICE_NAME);for (j = 0; j < xml_array[program_index].sub_pid_num; j++){if (j > 0){string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, ",");itoa(xml_array[program_index].sub_pid[j], buff, 10);string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, buff);}else{itoa(xml_array[program_index].sub_pid[j], buff, 10);string_append(str, GMS_MAX_BYTE_LENGTH_SERVICE_NAME, buff);}}rc = xmlTextWriterWriteElement(writer, BAD_CAST "SubPid", BAD_CAST str);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//pmt_pidrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "PmtPid", "%d", xml_array[program_index].pmt_pid);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//which tunnerrc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "IsTuner2", "%d", xml_array[program_index].is_channel_in_tunner_2);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterWriteElement LINE:%d\n", __LINE__);xmlFreeTextWriter(writer);return FALSE;}//end of parmrc = xmlTextWriterEndElement(writer);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");xmlFreeTextWriter(writer);return FALSE;}}rc = xmlTextWriterEndElement(writer);if (rc < 0){printf("testXmlwriterFilename: Error at xmlTextWriterEndElement\n");xmlFreeTextWriter(writer);return FALSE;}xmlFreeTextWriter(writer);strcpy(result_buffer,(const char *)xml_buf->content);xmlCleanupParser();xmlBufferFree(xml_buf);return TRUE;}
0 0
- c语言环境下的xml数据的序列化的过程以机顶盒向手机APK发送数据为例
- C 语言的数据序列化
- 以Gzip的形式通过服务器向客户端发送数据
- 序列化XML的类。包括向SQL传XML数据
- 再是用数据段的情况下,向显存发送…
- 单链表的插入(完整版程序c语言实现,以字符串为数据)
- 客户端以XML格式向服务器端发送数据
- 服务器端和客户端数据类型的自动转换:以XML方式序列化数据
- ajax如何向action发送数据的
- SpringMVC向页面发送数据的方法
- 通过手机的蓝牙向支持蓝牙接口的打印机发送数据打印问题
- C语言以数据块的形式读写文件
- 125 C语言以数据块的形式读写文件
- C语言:向排好序的数组中插入数据
- C语言中向屏幕写数据的诸多方式
- 一个解析XML数据的简单Demo(以KissXml为例)
- 一个解析XML数据的简单Demo(以KissXml为例)
- C语言的数据
- MyEclipse中使用JUnit进行单元测试
- 发送邮件 设置邮件昵称
- OutMan——Foundation框架中的集合类(一)(二)
- Win32 Window Hierarchy and Styles , Kyle Marsh
- UVa-442 Matrix Chain Multiplication
- c语言环境下的xml数据的序列化的过程以机顶盒向手机APK发送数据为例
- How to choose the FF plywood and wood I beam
- Java并发编程深入学习—— sleep和wait的区别
- 欢迎使用CSDN-markdown编辑器
- C# VS预生成事件命令行 和 生成后事件命令行
- HDUOJ_1874(畅通工程续)(spfa)
- Qt下使用的静态链接库------ *.lib转化为mingw使用的.a格式的静态库
- Android微信支付客户端开发概要
- CSND 一个神奇的网站