本篇文章给大家谈谈用c语言解析xml文件内容,以及C++读取xml文件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言xml解析2、c语言如何解析xml并将所有内容存入数组3、C# 解析 xml文件4、怎么用c语言解析xml文件
C语言xml解析
把所有的数据当做一个字符串
收到数据后先strstr(buffer,”?xml version=\”1.0\” encoding=\”UTF-8\”?”);
如果返回的是NULL则表示没有这段 退出
buffer是你收到的数据起始地址
c语言如何解析xml并将所有内容存入数组
/* 前段时间恰好做过类似的东西,代码可以给你参考下。
* 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
ColID1/ColID
ColCodekmh/ColCode
ColName字段1/ColName
ColTypeVARCHAR(11)/ColType
/Column
Column
ColID2/ColID
ColCodedfkmh/ColCode
ColName字段2/ColName
ColTypeVARCHAR(11)/ColType
/Column
Column
ColID3/ColID
ColCodehbh/ColCode
ColName字段3/ColName
ColTypeINTEGER(10)/ColType
/Column
/SrcRoot
C# 解析 xml文件
private void btnShowXML_Click(object sender, EventArgs e)
{
string xmlNodeText = “测试结点”;
XmlDocument xmlDom = new XmlDocument();
xmlDom.Load(“.\\books.xml”);
XmlElement xmlRoot = xmlDom.DocumentElement;//根元素
TreeNode treeRoot = new TreeNode();
treeRoot.Text = xmlRoot.Name;
treeRoot.Tag = xmlRoot;
treeRoot.Nodes.Add(xmlNodeText);
tvShowXml.Nodes.Add(treeRoot);
}
需要创建一个xml文件,还需放置一个TreeView控件.(实现的效果是利用TreeView控件来读取xml文件中的内容,代码不全,只给思路)
怎么用c语言解析xml文件
我上次才给人写过
xml文件内容
?xml version=”1.0″ encoding=”UTF-8″ ?
– aicomoa_response
– country_list
– country
id7/id
pid0/pid
continent_id1/continent_id
guohao93/guohao
cntitle阿富汗/cntitle
entitleAfghanistan/entitle
hztitle阿富汗/hztitle
jptitleアフガニスタン/jptitle
kotitle??????/kotitle
jp_pinyinア/jp_pinyin
pinyinAFuHan/pinyin
sid0/sid
jibie1/jibie
/country
– country
id8/id
pid0/pid
continent_id2/continent_id
guohao355/guohao
cntitle阿尔巴尼亚/cntitle
entitleAlbania/entitle
hztitle阿尔巴尼亚/hztitle
jptitleアルバニア/jptitle
kotitle /
jp_pinyinア/jp_pinyin
pinyinAErBaNiYa/pinyin
sid0/sid
jibie1/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文件内容的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于C++读取xml文件、用c语言解析xml文件内容的信息别忘了在本站进行查找喔。