元素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标准的知识如果需要可以参考官方的手册。

hostodo:美国大流量VPS,低至$3,8T流量/月-1.5G内存/1核/25gNVMe/拉斯维加斯+迈阿密

hostodo从2014年年底运作至今一直都是走低价促销侧率运作VPS,在市场上一直都是那种不温不火的品牌知名度,好在坚持了7年都还运作得好好的,站长觉得hostodo还是值得大家在买VPS的时候作为一个候选考虑项的。当前,hostodo有拉斯维加斯和迈阿密两个数据中心的VPS在促销,专门列出了2款VPS给8T流量/月,基于KVM虚拟+NVMe整列,年付送DirectAdmin授权(发ticket...

FlashFXP FTP工具无法连接主机常见原因及解决办法

目前,我们都在用哪个FTP软件?喜欢用的是WinSCP,是一款免费的FTP/SFTP软件。今天在帮助一个网友远程解决问题的时候看到他用的是FlashFXP FTP工具,这个工具以前我也用过,不过正版是需要付费的,但是网上有很多的绿色版本和破解版本。考虑到安全的问题,个人不建议选择破解版。但是这款软件还是比较好用的。今天主要是遇到他的虚拟主机无法通过FTP连接主机,这里我就帮忙看看到底是什么问题。一...

香港 1核 1G 5M 22元/月 美国 1核 512M 15M 19.36元/月 轻云互联

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:用户购买任...

c xml为你推荐
刷网站权重刷出来的流量会提高网站的权重吗?深圳公交车路线深圳公交车路线今日热点怎么删除千牛里面的今日热点怎么取消_?idc前线求电影敢死队电影里的歌曲!mate8价格手机华为mat8售价多少云挂机快手极速版后台云挂机辅?助各位用了吗?在哪找的?小米手柄小米手柄怎么用?微信电话本怎么用微信电话本在哪里 微信电话本怎么打开中国杀毒软件排行榜谁知道世界杀毒软件排名?nokia最新手机诺基亚最新款手机都那些
紧急升级请记住新域名 evssl typecho 商家促销 免费ftp空间申请 52测评网 免费申请网站 双12 彩虹云 smtp虚拟服务器 主机管理系统 申请免费空间 金主 攻击服务器 阿里云邮箱个人版 双十二促销 电信主机托管 脚本大全 e-mail 神棍节 更多