* Xml配置见最后
*/
typedef struct SrcFileFmt
{
int ColID
char ColCode[64] /* 字段英文名称 */
char ColName[128] /* 字段中文名称*/
char ColType[20] /* 字段类型(包含长度) */
char ColComment[128] /* 字段描述 */
}SrcFileFmt
int main(int argc, char **argv)
{
SrcFileFmt SrcFileFmt[128]
int iNum = -1
if ( 2 > argc )
{
printf("Usage: %s SrcXmlFile\n", argv[0])
return -1
}
iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt)
if (iNum == -1)
{
return -1
}
return 0
}
/* 调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmt srcfilefmt[]中
* 此函数依赖于libxml2-2.9.2.tar.xz
*/
int parseSourceCfg(char *FileName, SrcFileFmt srcfilefmt[])
{ /* 解析源文件xml,FileName 为源xml文件名 */
xmlDocPtr doc
xmlNodePtr cur, root
char sFileName[64] = {'\0'}
int cnt = 0
if (FileName == NULL)
{
return -1
}
sprintf(sFileName, "%s.xml", FileName)
doc = xmlParseFile(sFileName)
if (doc == NULL)
{
return -1
}
root = xmlDocGetRootElement(doc)
if (root == NULL) {
xmlFreeDoc(doc)
return(-1)
}
if (xmlStrcmp(root->name, (const xmlChar *) "SrcRoot"))
{
xmlFreeDoc(doc)
return -1
}
cur = root->xmlChildrenNode
while (cur != NULL)
{
if ((!xmlStrcmp(cur->name, (const xmlChar *)"Column")))
{
xmlChar *key
xmlNodePtr cur_sub = cur
cur_sub = cur_sub->xmlChildrenNode
while (cur_sub != NULL)
{
if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColID"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
srcfilefmt[cnt].ColID = atoi((char*)key)
xmlFree(key)
}
if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColCode"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColCode, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColName"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColName, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColType"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColType, (char*)key)
xmlFree(key)
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar *)"ColComment"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1)
killblank((char*)key)
strcpy(srcfilefmt[cnt].ColComment, (char*)key)
xmlFree(key)
}
cur_sub = cur_sub->next
}
cnt++
}
cur = cur->next
}
xmlFreeDoc(doc)
return cnt
}
<SrcRoot>
<Column>
<ColID>1</ColID>
<ColCode>kmh</ColCode>
<ColName>字段1</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>2</ColID>
<ColCode>dfkmh</ColCode>
<ColName>字段2</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>3</ColID>
<ColCode>hbh</ColCode>
<ColName>字段3</ColName>
<ColType>INTEGER(10)</ColType>
</Column>
</SrcRoot>
把所有的数据当做一个字符串收到数据后先strstr(buffer,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
如果返回的是NULL则表示没有这段 退出
buffer是你收到的数据起始地址
我上次才给人写过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文件就行了