智能终端定制开发 ad
MTK/瑞芯微/高通-Android,智能模块/智能终端方案商

深度定制各类智能终端和智能硬件产品,提供硬件选型咨询、参考设计、元器件推荐、驱动开发、行业模块集成、操作系统定制与算法集成等软硬件定制服务。
contact.aspx

Android核心板产品覆盖2G、3G、4G通讯,双核、四核、八核CPU,可选的平台有MTK6580、MTK6737、MTK6750等,Android版本有5.1 6.0 7.0等。
contact.aspx

可广泛应用于低端智能POS、安防监控、车载设备、低端智能机器人、智能家居、智能硬件、工业智能手持设备、低端智能对讲设备、低端警务或执法设备、智能穿戴、贩卖机、物流柜、智能门禁系统等行业和设备。
contact.aspx

可提供以太网转串口透传,WIFI转串口透传,蓝牙转串口透传,CAN总线模拟量控制输出模块等。
contact.aspx

带3G或4G通讯功能,运行android系统,有多个串口,可以外挂各种模块:条码扫描、RFID、指纹识别、身份证识别、磁条卡、ID卡、GPS/北斗模块等。
contact.aspx

具有4G通讯功能,多个RS232或RS485接口,以太网接口,USB接口,CAN接口,多个AD输入。基于Android系统智能平台,方便APP应用开发。器件严格选型,运行稳定,质量可靠。
contact.aspx

XML文件的简单初步解析
[VC 编程] 2008-04-03



作者:南京邮电大学 吴登荣

下载源代码

摘要:通过扫描字符串及结构体数组,实现对。

关键字:XML,解析

主要算法:XML文件的实质是字符串,解析XML的工作主要是了解XML的规则,从而对字符串进行分析,解析。从XML文件的开始扫描,连续获得2个标签的位置,转化为字符串,比较firstname和nextname,如果匹配关闭,则把标签名,内容,层次,存放到结构体数组中,继续扫描,如果不匹配,则把firstname压栈,继续扫描,直到firstname和nextname匹配或者与栈顶元素匹配。本题主要是自己设计一种数据结构和一种算法来把解析出来的XML数据信息,合理的存放,从而实现最简单最初步的解析。我是在控制台上实现的,运行后可以把XML的所有结点的标签名,值,以及它位于整个XML文件的层次。具体的请参考源程序,在VC6.0下测试通过(其中的web.xml为程序运行的初始xml文件)。

结构体定义:

struct xmlnode { CString name;//标签名 CString value;//内容 int id;//这个标签的层次,通过栈实现 }; xmlnode node[1000];
解析函数:
void str2array(CString context) { CString firstname; CString nextname; CString tempname; CString tempvalue; CStringArray stack;//一个记录标签是否关闭的栈 stack.Add(""); int max=0; int nid=1; int k=0; int i1,i2,j1,j2,k1,k2; while((k<context.GetLength())&&(context[k]!=~~<~~))//确定各个标签的位置 { k++; } i1=k; while((k<context.GetLength())&&(context[k]!=~~ ~~)&&(context[k]!=~~>~~)) { k++; } k1=k; while((k<context.GetLength())&&(context[k]!=~~>~~)) { k++; } j1=k; firstname=getcontext(context,i1,k1);//获得第一个标签 while((k<context.GetLength())&&(context[k]!=~~<~~))//确定各个标签的位置 { k++; } i2=k; while((k<context.GetLength())&&(context[k]!=~~ ~~)&&(context[k]!=~~>~~)) { k++; } k2=k; while((k<context.GetLength())&&(context[k]!=~~>~~)) { k++; } j2=k; nextname=getcontext(context,i2,k2);//获得第二个标签 tempname=~~/~~+firstname; while(k<context.GetLength()) { if(tempname.Compare(nextname)==0)//该标签关闭 { node[count].name=firstname; tempvalue=getcontext(context,j1,i2); tempvalue.TrimLeft(); tempvalue.TrimRight(); node[count].value=tempvalue; node[count].id=nid; count++; do { while((k<context.GetLength())&&(context[k]!=~~<~~))//获得下一个标签 { k++; } i2=k; while((k<context.GetLength())&&(context[k]!=~~ ~~)&&(context[k]!=~~>~~)) { k++; } k2=k; while((k<context.GetLength())&&(context[k]!=~~>~~)) { k++; } j2=k; nextname=getcontext(context,i2,k2); if(nextname.Compare(stack.GetAt(max))==0) { stack.RemoveAt(max); nid--; max--; } }while((nextname.GetLength()>0)&&(nextname[0]==~~/~~)); //same } else//标签没有关闭,压栈 { tempname=~~/~~+firstname; max++; stack.Add(tempname); node[count].name=firstname; node[count].value=""; node[count].id=nid; count++; nid++; //different } firstname=nextname; i1=i2; k1=k2; j1=j2; while((k<context.GetLength())&&(context[k]!=~~<~~))//获得下一个标签 { k++; } i2=k; while((k<context.GetLength())&&(context[k]!=~~ ~~)&&(context[k]!=~~>~~)) { k++; } k2=k; while((k<context.GetLength())&&(context[k]!=~~>~~)) { k++; } j2=k; nextname=getcontext(context,i2,k2); tempname=~~/~~+firstname; } }
附言:
本题为南京邮电大学计算机学院科协交流题,本程序对XML开始的说明部分不能解析,对注释也不能解析,只能达到一个最基本的解析。

[VC 编程添加评论 | 评论/阅读(0/324)
评论
昵称
主页
内容
递交


Copyright @ 我的开发笔记     2008 - 2017         粤ICP备19155526号-1