Ⅰ c语言解析XML文件
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Usage: <app> <filepath>\n");
return 1;
}
char szFileBuff[1024] = {0}, szBuff[1024];
FILE *fp;
char szName[64] = {0}, szId[64] = {0}, szSex[64] = {0}, szAge[64] = {0};
char *lFirst, *lEnd;
if ((fp = fopen(argv[1], "r")) == NULL)
{
printf("fopen %s file error!\n", argv[1]);
return 0;
}
while(fgets(szFileBuff, 1023, fp))
{
if ((lFirst = strstr(szFileBuff, "<name>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</name>");
memcpy(szName, lFirst + 6, lEnd - lFirst - 6);
}
if ((lFirst = strstr(szFileBuff, "<id>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</id>");
memcpy(szId, lFirst + 4, lEnd - lFirst - 4);
}
if ((lFirst = strstr(szFileBuff, "<sex>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</sex>");
memcpy(szSex, lFirst + 5, lEnd - lFirst - 5);
}
if ((lFirst = strstr(szFileBuff, "<age>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</age>");
memcpy(szAge, lFirst + 5, lEnd - lFirst - 5);
}
sprintf(szBuff, "name:%s;id:%s;sex:%s;age:%s", szName, szId, szSex, szAge);
printf("buff[%s]\n", szBuff);
}
fclose(fp);
return 0;
}
Ⅱ C语言xml解析
把所有的数据当做一个字符串
收到数据后先strstr(buffer,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
如果返回的是NULL则表示没有这段 退出
buffer是你收到的数据起始地址
Ⅲ 怎么用c语言解析xml文件
我上次才给人写过
xml文件内容
<?xml version="1.0" encoding="UTF-8" ?>
- <aicomoa_response>
- <country_list>
- <country>
<id>7</id>
<pid>0</pid>
<continent_id>1</continent_id>
<guohao>93</guohao>
<cntitle>阿富汗</cntitle>
<entitle>Afghanistan</entitle>
<hztitle>阿富汗</hztitle>
<jptitle>アフガニスタン</jptitle>
<kotitle>??????</kotitle>
<jp_pinyin>ア</jp_pinyin>
<pinyin>AFuHan</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
- <country>
<id>8</id>
<pid>0</pid>
<continent_id>2</continent_id>
<guohao>355</guohao>
<cntitle>阿尔巴尼亚</cntitle>
<entitle>Albania</entitle>
<hztitle>阿尔巴尼亚</hztitle>
<jptitle>アルバニア</jptitle>
<kotitle />
<jp_pinyin>ア</jp_pinyin>
<pinyin>AErBaNiYa</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
</country_list>
</aicomoa_response>
运行结果
Info[0]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Info[1]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Press any key to continue
代码
#include <stdio.h>
#include <string.h>
main()
{
int i=0;
FILE *fp;
char szFileBuff[1024] = {0}, szBuff[100][1024];
char id[10] = {0}, pid[10] = {0}, continent_id[10] = {0}, guohao[10] = {0},
cntitle[64]= {0},entitle[64]= {0},hztitle[64] = {0},jptitle[64] = {0},
kotitle[64] = {0},jp_pinyin[64] = {0}, pinyin[64] = {0},sid[10] = {0},jibie[10] = {0};
char *lFirst, *lEnd;
fp = fopen("country.txt","r");
if (fp==NULL)
{
printf("read XML file error!\n");
}
while(fgets(szFileBuff, 1023, fp))
{
if ((lFirst = strstr(szFileBuff, "<id>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</id>");
memcpy(id, lFirst + 4, lEnd - lFirst - 4);
}
if ((lFirst = strstr(szFileBuff, "<pid>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</pid>");
memcpy(pid, lFirst + 5, lEnd - lFirst - 5);
}
if ((lFirst = strstr(szFileBuff, "<continent_id>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</continent_id>");
memcpy(continent_id, lFirst + 14, lEnd - lFirst - 14);
}
if ((lFirst = strstr(szFileBuff, "<guohao>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</guohao>");
memcpy(guohao, lFirst + 8, lEnd - lFirst - 8);
}
if ((lFirst = strstr(szFileBuff, "<cntitle>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</cntitle>");
memcpy(cntitle, lFirst + 9, lEnd - lFirst - 9);
}
if ((lFirst = strstr(szFileBuff, "<entitle>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</entitle>");
memcpy(entitle, lFirst + 9, lEnd - lFirst - 9);
}
if ((lFirst = strstr(szFileBuff, "<hztitle>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</hztitle>");
memcpy(hztitle, lFirst + 9, lEnd - lFirst - 9);
}
if ((lFirst = strstr(szFileBuff, "<jptitle>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</jptitle>");
memcpy(jptitle, lFirst + 9, lEnd - lFirst - 9);
}
if ((lFirst = strstr(szFileBuff, "<kotitle>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</kotitle>");
memcpy(kotitle, lFirst + 9, lEnd - lFirst - 9);
}
if ((lFirst = strstr(szFileBuff, "<jp_pinyin>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</jp_pinyin>");
memcpy(jp_pinyin, lFirst + 11, lEnd - lFirst - 11);
}
if ((lFirst = strstr(szFileBuff, "<pinyin>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</pinyin>");
memcpy(pinyin, lFirst + 8, lEnd - lFirst - 8);
}
if ((lFirst = strstr(szFileBuff, "<sid>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</sid>");
memcpy(sid, lFirst + 5, lEnd - lFirst - 5);
}
if ((lFirst = strstr(szFileBuff, "<jibie>")) != NULL)
{
lEnd = strstr(lFirst + 1, "</jibie>");
memcpy(jibie, lFirst + 7, lEnd - lFirst - 7);
}
if ((lFirst = strstr(szFileBuff, "</country>")) != NULL)
{
sprintf(szBuff[i],"id:%s|pid:%s|continent_id:%s|guohao:%s|cntitle:%s|entitle:%s|hztitle:%s|jptitle:%s|kotitle:%s|jp_pinyin:%s|pinyin:%s|sid:%s|jibie:%s|",
id,pid,continent_id,guohao,cntitle,entitle,hztitle,jptitle,kotitle,jp_pinyin, pinyin,sid,jibie);
printf("Info[%d]=[%s]\n",i++, szBuff);
}
}
fclose(fp);
}
补充:你这个就说得太笼统了,
1 你上传的xml文件具体格式是什么?
2 要在网页上显示的具体格式是什么
3 你根本不知道怎么做 所以也不知道怎么问
我不用关心你的c语言的cgi吧?我才不管是用什么上传的
只有你说的嵌入式三个字 给我一点有用信息 就是解析这个xml用插件恐怕是不行
只能C语言
4 我现在只要求你的xml文件格式和 网页上要显示哪些xml中解析出来的信息
只要知道这些 我只需要在我的程序上加上生成html文件就行了
Ⅳ C语言 如何读取xml文件中的数据并存入一个结构体中
一般是用第三方比如TinyXml,或者你自己实现。
Ⅳ c解析xml文件
不能,这个是难。大家很多不会做,中国有很少会做的。
Ⅵ linux下c语言实现xml文件的解析(使用libxml2库),有什么书籍推荐或demo参考,多谢~
这种事情一般都不用上网打,在你的库的包中就有example进去,打一下就OK了,并且以后遇到这种事也可以解决了,拿里面的例子修改几次就会了
Ⅶ C语言实现用libxml2解析复杂xml文件,坐等大神帮忙
汗。。你下载一个libxml2然后loadlibrary加载起来,然后直接调里面的接口就好了啊
Ⅷ 用C语言读取xml文件,怎么实现
我上次才给人写过
xml文件内容
<?xmlversion="1.0"encoding="UTF-8"?>
-<aicomoa_response>
-<country_list>
-<country>
<id>7</id>
<pid>0</pid>
<continent_id>1</continent_id>
<guohao>93</guohao>
<cntitle>阿富汗</cntitle>
<entitle>Afghanistan</entitle>
<hztitle>阿富汗</hztitle>
<jptitle>アフガニスタン</jptitle>
<kotitle>??????</kotitle>
<jp_pinyin>ア</jp_pinyin>
<pinyin>AFuHan</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
-<country>
<id>8</id>
<pid>0</pid>
<continent_id>2</continent_id>
<guohao>355</guohao>
<cntitle>阿尔巴尼亚</cntitle>
<entitle>Albania</entitle>
<hztitle>阿尔巴尼亚</hztitle>
<jptitle>アルバニア</jptitle>
<kotitle/>
<jp_pinyin>ア</jp_pinyin>
<pinyin>AErBaNiYa</pinyin>
<sid>0</sid>
<jibie>1</jibie>
</country>
</country_list>
</aicomoa_response>
运行结果
Info[0]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Info[1]=[id:7|pid:0|continent_id:1|guohao:93|cntitle:阿富汗|entitle:Afghanistan|
hztitle:阿富汗|jptitle:アフガニスタン|kotitle:??????|jp_pinyin:ア|pinyin:AFuHan|
sid:0|jibie:1|]
Pressanykeytocontinue
代码
#include<stdio.h>
#include<string.h>
main()
{
inti=0;
FILE*fp;
charszFileBuff[1024]={0},szBuff[100][1024];
charid[10]={0},pid[10]={0},continent_id[10]={0},guohao[10]={0},
cntitle[64]={0},entitle[64]={0},hztitle[64]={0},jptitle[64]={0},
kotitle[64]={0},jp_pinyin[64]={0},pinyin[64]={0},sid[10]={0},jibie[10]={0};
char*lFirst,*lEnd;
fp=fopen("country.txt","r");
if(fp==NULL)
{
printf("readXMLfileerror! ");
}
while(fgets(szFileBuff,1023,fp))
{
if((lFirst=strstr(szFileBuff,"<id>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</id>");
memcpy(id,lFirst+4,lEnd-lFirst-4);
}
if((lFirst=strstr(szFileBuff,"<pid>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</pid>");
memcpy(pid,lFirst+5,lEnd-lFirst-5);
}
if((lFirst=strstr(szFileBuff,"<continent_id>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</continent_id>");
memcpy(continent_id,lFirst+14,lEnd-lFirst-14);
}
if((lFirst=strstr(szFileBuff,"<guohao>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</guohao>");
memcpy(guohao,lFirst+8,lEnd-lFirst-8);
}
if((lFirst=strstr(szFileBuff,"<cntitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</cntitle>");
memcpy(cntitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<entitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</entitle>");
memcpy(entitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<hztitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</hztitle>");
memcpy(hztitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<jptitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jptitle>");
memcpy(jptitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<kotitle>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</kotitle>");
memcpy(kotitle,lFirst+9,lEnd-lFirst-9);
}
if((lFirst=strstr(szFileBuff,"<jp_pinyin>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jp_pinyin>");
memcpy(jp_pinyin,lFirst+11,lEnd-lFirst-11);
}
if((lFirst=strstr(szFileBuff,"<pinyin>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</pinyin>");
memcpy(pinyin,lFirst+8,lEnd-lFirst-8);
}
if((lFirst=strstr(szFileBuff,"<sid>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</sid>");
memcpy(sid,lFirst+5,lEnd-lFirst-5);
}
if((lFirst=strstr(szFileBuff,"<jibie>"))!=NULL)
{
lEnd=strstr(lFirst+1,"</jibie>");
memcpy(jibie,lFirst+7,lEnd-lFirst-7);
}
if((lFirst=strstr(szFileBuff,"</country>"))!=NULL)
{
sprintf(szBuff[i],"id:%s|pid:%s|continent_id:%s|guohao:%s|cntitle:%s|entitle:%s|hztitle:%s|jptitle:%s|kotitle:%s|jp_pinyin:%s|pinyin:%s|sid:%s|jibie:%s|",
id,pid,continent_id,guohao,cntitle,entitle,hztitle,jptitle,kotitle,jp_pinyin,pinyin,sid,jibie);
printf("Info[%d]=[%s] ",i++,szBuff);
}
}
fclose(fp);
}
Ⅸ c语言如何解析xml并将所有内容存入数组
/*前段时间恰好做过类似的东西,代码可以给你参考下。
*Xml配置见最后
*/
typedefstructSrcFileFmt
{
intColID;
charColCode[64];/*字段英文名称*/
charColName[128];/*字段中文名称*/
charColType[20];/*字段类型(包含长度)*/
charColComment[128];/*字段描述*/
}SrcFileFmt;
intmain(intargc,char**argv)
{
SrcFileFmtSrcFileFmt[128];
intiNum=-1;
if(2>argc)
{
printf("Usage:%sSrcXmlFile ",argv[0]);
return-1;
}
iNum=parseSourceCfg(SrcCfgFile,SrcFileFmt);
if(iNum==-1)
{
return-1;
}
return0;
}
/*调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmtsrcfilefmt[]中
*此函数依赖于libxml2-2.9.2.tar.xz
*/
intparseSourceCfg(char*FileName,SrcFileFmtsrcfilefmt[])
{/*解析源文件xml,FileName为源xml文件名*/
xmlDocPtrdoc;
xmlNodePtrcur,root;
charsFileName[64]={'