元素C 中使用Expat解析XML

c xml  时间:2021-02-14  阅读:()

C++中使用Exp at解析XML

使用exp at的原因很多主要还是因为exp at更灵活。习惯了TinyXML一开始不太习惯exp at分析一下其实很容易上手的。

1.回调函数

以下案例解析xml文件中的elment attribute和t ext。 exp at使用回调方式返回xml数据解析器解析到一个elem ent及其内部属性后将调用事先设置好的函数同样当ele ment结束和text结束后也会分别调用对应的函数。

2.如何处理数据之间的包含关系

典型的方式是定义三个函数分别处理elment开始含属性、elem ent结束和文本内容。回调函数的第一个参数是自定义的通常用于存储XML文档的上下文信息用XML_S etUs erData可以设置这个参数下例中传递一个整数指针以便在每次回调时能知道该元素是第几层元素。

该参数也可以是一个栈对象的地址开始一个元素时将新元素对应的数据压入堆栈处理下一级元素时新元素是栈顶元素在子元素然后处理完了继续把该元素压入堆栈继续下一级新的子元素。当元素结束后需要出栈以便解析下个兄弟元素程时能取到父节点。

好啦基本应用还是很简单的实际上Exp at的AP I函数不多。

3.如何处理属性

属性通过Eleme ntH andler回调函数传入这里有一个c har**atts就是属性这是一个字符指针数组如果有N个属性数组大小就是2*N+1最后一个素组元素为空指针奇数指针对应属性名称偶数指针对应属性值字符串格式。可以在一个循环中处理多个属性当遇到空指针时表示没有/ic comp any/”target=“_blank”>>

#inc lud e ”“

#pragma warning(disable:4996)

#define XML_FMT_INT_MOD ”l”

static void XMLCALL startElement(void *userData,

const char *name, const char **atts){int i;int *depthPtr = (int *)us erData;fo r (i = 0; i < *d ep thP tr; i++)p rintf(“ ”);p rintf(nA ME);

*depthPtr += 1;for(i=0;atts[i]!=0;i+=2)

{p rintf(“ %s=%s”,atts[i],atts[i+1]);

}p rintf(“\n”);

}static void XMLCALL endElement(void *userData,const char *name)

{int *depthPtr = (int *)us erData;

*depthPtr -= 1;

}int main(int argc, char *argv[])

{char buf[BUFSIZ]; XML_Parser parser =

XML_P ars erCreate(NULL);int done; int depth = 0;

XML_S etUs erData(p ars er, &AMP;dep th);

XML_S etEle me ntH and l er(p ars er, s tartE le me nt, end E le ment);

F ILE* p F ile= argc<2 ?s tdin : fop en(argv[1],”rb”);do

{ int len = (int)fread(buf, 1, sizeof(buf), pFile);done = len < s izeo f(buf);if (XML_P ars e(p ars er, buf, len, done) ==XML_STATUS_ERROR)

{fprintf(stderr,”%s at line %”

XM L_F MT_INT_MO D ”u\n”,

XML_Erro rS tring(XML_G etErro rC o d e(p ars er)),XML_G etCurrentL ineNumb er(p ars er));return 1;

}

}while (!d o ne);

XML_P ars erFree(p ars er);fclose(pFile);return 0;

}

4.其他Elem entHan ld erexp at还可以设置C Data Comment的hand ler另外一些函数本人还没使用过涉及到更多的xml标准的知识如果需要可以参考官方的手册。

Friendhosting(月1.35欧元),不限流量,9机房可选

今天9月10日是教师节,我们今天有没有让孩子带礼物和花送给老师?我们这边不允许带礼物进学校,直接有校长在门口遇到有带礼物的直接拦截下来。今天有看到Friendhosting最近推出了教师节优惠,VPS全场45折,全球多机房可选,有需要的可以看看。Friendhosting是一家成立于2009年的保加利亚主机商,主要提供销售VPS和独立服务器出租业务,数据中心分布在:荷兰、保加利亚、立陶宛、捷克、乌...

JustHost:俄罗斯/新西伯利亚vps,512MB内存/5GB空间/不限流量/200Mbps/KVM/自由更换IP,$1.57/月

justhost怎么样?justhost是一家俄罗斯主机商,2006年成立,提供各种主机服务,vps基于kvm,有HDD和SSD硬盘两种,特色是200Mbps不限流量(之前是100Mbps,现在升级为200Mbps)。下面是HDD硬盘的KVM VPS,性价比最高,此外还有SSD硬盘的KVM VPS,价格略高。支持Paypal付款。国内建议选择新西伯利亚或者莫斯科DataLine。支持Paypal付...

德阳电信高防物理机 16核16G 50M 260元/月 达州创梦网络

达州创梦网络怎么样,达州创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,一手四川托管服务商,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网封UDP,无视UDP攻击,机房集群高达1.2TB,单机可提供1...

c xml为你推荐
51自学网站推荐一个好一点的自学网站,关于网站建设的。金山杀毒怎么样金山杀毒好吗ios7固件下载iOS7如何升级固件?gbk编码表GB GBK utf8码的区别blogcnCK沉珂是个怎样的一个人?之后又是怎样的 ?域名库电脑上文件有多少域名?各什么意思?freebsd安装FreeBSD下如何安装ports的方法263企业邮箱设置苹果5s一键设置263企业邮箱手工杀毒怎样不用杀毒软件自己手动查毒?怎样申请支付宝怎么申请支付宝?
新网域名解析 80vps 香港新世界电讯 鲜果阅读 12306抢票助手 南昌服务器托管 服务器监测 路由跟踪 群英网络 supercache godaddy空间 国外代理服务器 asp空间 空间排行榜 发证机构 远程登录 电信测速器在线测网速 bwg 装修瓦工招聘 1500元电脑主机配置 更多