当前位置:首页 » 编程语言 » c语言操作xml

c语言操作xml

发布时间: 2022-09-26 20:08:15

Ⅰ 用c语言读取xml文件,怎么实现

xml文件和txt文件相同,使用普通的文本操作函数即可读取。

1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:

#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.xml","r");//打开xml格式输入文件
FILE*fp2=fopen("output.txt","w");//打开输出文件
if(fp1==NULL||fp2==NULL){//若打开文件失败则退出
puts("不能打开文件!");
rturn0;
}
fscanf(fp1,"%d",&a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串

printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数

fputs(c,fp2);//向输出文件写入一行字符串
fputc(b,fp2);//向输出文件写入一个字符
fprintf(fp2,"%d",a);//向输出文件写入一个整数

fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return0;
}

Ⅱ 怎么用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文件

用VC吧,下面有一个例子,你参照下:

voidCreateXml()
{
CoInitialize(NULL);
//创建文档
MSXML2::IXMLDOMDocument2PtrpXMLDoc=NULL;
//创建DOMDocument对象
HRESULThr=pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if(!SUCCEEDED(hr))
{
return;
}
//
MSXML2::=NULL;
pXMLProc=pXMLDoc->createProcessingInstruction("xml","version='1.0'encoding='UTF-8'");

_variant_tvNullVal;
vNullVal.vt=VT_NULL;
pXMLDoc->insertBefore(pXMLProc,vNullVal);
//创建根结点
_variant_tvarNodeType((short)MSXML2::NODE_ELEMENT);
MSXML2::IXMLDOMNodePtrpXMLNodeRoot=NULL;
pXMLNodeRoot=pXMLDoc->createNode(varNodeType,_T("Cases"),_T(""));
//添加根结点
pXMLDoc->appendChild(pXMLNodeRoot);
//创建并添加下级结点
MSXML2::IXMLDOMNodePtrpXMLNodeNode=NULL;
pXMLNodeNode=pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Case")));
//创建下级元素结点
MSXML2::IXMLDOMElementPtrpXMLEle=NULL;
pXMLEle=pXMLDoc->createElement(_T("CopyFile"));
//创建并设置下级结点属性
MSXML2::IXMLDOMAttributePtrpXMLAttr=NULL;
pXMLAttr=pXMLDoc->createAttribute(_T("src"));
pXMLAttr->nodeTypedValue="C:\test.txt";
pXMLEle->attributes->setNamedItem(pXMLAttr);
pXMLAttr=pXMLDoc->createAttribute(_T("dest"));
pXMLAttr->nodeTypedValue="D:\Test.txt";
pXMLEle->attributes->setNamedItem(pXMLAttr);
//添加元素结点
pXMLNodeNode->appendChild(pXMLEle);
MSXML2::IXMLDOMElementPtrpXMLEle1=NULL;
pXMLEle1=pXMLDoc->createElement(_T("DelFile"));
pXMLEle1->appendChild(pXMLDoc->createTextNode("C:\test.txt"));
//添加元素结点
pXMLNodeNode->appendChild(pXMLEle1);

//保存文档
pXMLDoc->save(_T("d:\Test.xml"));
}

效果如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<Cases>
<Case>
<CopyFilesrc="C: est.txt"dest="D:Test.txt"/>
<DelFile>C: est.txt</DelFile>
</Case>
</Cases>

为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import "msxml4.dll"

Ⅳ c语言如何调用xml的接口函数

/***************
<?xmlversion="1.0"encoding="utf-8"?>
<Cases>
<case>
<No>001</No>
<CopyFilesrc="C: est.txt"dest="D: est.txt"></CopyFile>
</case>

<case>
<No>002</No>
<DelFile>C: est.txt</DelFile>
</case>
</Cases>
*******************/
//我们用MFC来读取上述xml,代码如下:

voidReadXml(CStringstrXmlPath)
{
MSXML2::IXMLDOMDocumentPtrpDoc;
::CoInitialize(NULL);
HRESULThr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));

if(!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。 请检查运行环境"),_T("错误"),MB_ICONERROR);
return;
}
//读取xml
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOLbhr=pDoc->load((_variant_t)strXmlPath);
if(bhr!=VARIANT_TRUE){
MessageBox(_T("无法正确读取xml文件"),_T("错误"),MB_ICONERROR);
return;
}
//根节点取得
MSXML2::IXMLDOMElementPtrroot=pDoc->documentElement;
//取得根节点的名字
_variant_tstrRootName=root->nodeName;
_bstr_twstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtrnodeList=root->GetchildNodes();//cases

//解析cases的子节点
ReadCases(nodeList);
}

voidReadCases(MSXML2::IXMLDOMNodeListPtrnodeList)
{
intilength=nodeList->Getlength();
for(intnodeCount=0;nodeCount<ilength;nodeCount++){
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrNodeName=nodePtr->GetnodeName();
_variant_tstrNodeValue=nodePtr->GetnodeValue();

//读取case节点下的子节点
ReadCase(nodePtr->GetchildNodes());
}
}

voidReadCase(MSXML2::IXMLDOMNodeListPtrnodeList)
{
CStringstrLogInfo;
strLogInfo.Empty();
CStringstrNo;//case编号
CStringstrSrcFile;//源文件
CStringstrDestFile;//目标文件
for(intnodeCount=0;nodeCount<nodeList->Getlength();nodeCount++)
{
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrCaseNodeName=nodePtr->GetnodeName();
_variant_tstrCaseNodeValue=nodePtr->Gettext();
BSTRbStrTemp=strCaseNodeName.bstrVal;
CStringstrTemp=CString(bStrTemp);
SysFreeString(bStrTemp);
CStringstrNodeName=strTemp;
//节点的值,如何取得?
if(0==strNodeName.CompareNoCase(_T("NO")))
{
strNo=(BSTR)strCaseNodeValue.pbstrVal;

//取得的值可以打印出来
printf(strNo);
}
//节点有属性值,该怎么处理?
elseif(0==strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty();
//取得节点的属性值
MSXML2::=nodePtr->Getattributes();
for(intj=0;j<pDOMAttrList->Getlength();j++)
{
MSXML2::IXMLDOMNodePtrpDOMAttr=pDOMAttrList->Getitem(j);
//取得源文件路径
if(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("src")))
{
strSrcFile=pDOMAttr->GetnodeTypedValue();
//取得目标文件路径
}elseif(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("dest")))
{
strDestFile=pDOMAttr->GetnodeTypedValue();
}

CopyFile(strSrcFile,strDestFile,FALSE);
}
elseif(0==strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile=CString((BSTR)strCaseNodeValue.pbstrVal);

DeleteFile(strDestFile);
}
}
}
//为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import"msxml4.dll"

Ⅳ 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]={''};
intcnt=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,(constxmlChar*)"SrcRoot"))
{
xmlFreeDoc(doc);
return-1;
}

cur=root->xmlChildrenNode;
while(cur!=NULL)
{
if((!xmlStrcmp(cur->name,(constxmlChar*)"Column")))
{
xmlChar*key;
xmlNodePtrcur_sub=cur;
cur_sub=cur_sub->xmlChildrenNode;

while(cur_sub!=NULL)
{
if((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColID"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
srcfilefmt[cnt].ColID=atoi((char*)key);
xmlFree(key);
}
if((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColCode"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColCode,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColName"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColName,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"ColType"))){
key=xmlNodeListGetString(doc,cur_sub->xmlChildrenNode,1);
killblank((char*)key);
strcpy(srcfilefmt[cnt].ColType,(char*)key);
xmlFree(key);
}
elseif((!xmlStrcmp(cur_sub->name,(constxmlChar*)"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);
returncnt;
}

<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>

Ⅵ 如何用C语言实现对xml文件的加密

把xml就当做一个普通的二进制文件
然后随便找一个加密算法
按照字节读入xml文件
然后按照加密算法进行加密转换,输出到目标文件就可以了
简单的
可以用异或方式。

Ⅶ 有没有C语言的对xml文件读写操作的API

libxml2就可以啊
Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。具体的介绍就参考 http://xmlsoft.org/

Ⅷ 在dos环境下用c语言如何能够操作XML文件,用什么工具如何操作

这个只要是用C语言实现的XML解析器就可以了嘛
dos环境不是问题,一般数据处理都是不会用到图形界面的部分的,图形界面只是数据的一种展示手段而已

如果一定要用C语言的话,那么我推荐一个XML解析器是libxml
如果可以用C++的话,那我就推荐你使用TinyXML
这两个都是非常优秀的XML解析器,并且都是开源的,你可以网络一下来下载。

我这里就不贴地址了,贴了地址要被审核的

Ⅸ C语言 如何读取xml文件中的数据并存入一个结构体中

一般是用第三方比如TinyXml,或者你自己实现。

Ⅹ C语言xml解析

把所有的数据当做一个字符串
收到数据后先strstr(buffer,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
如果返回的是NULL则表示没有这段 退出
buffer是你收到的数据起始地址

热点内容
iis7403禁止访问被拒绝 发布:2024-12-28 13:03:27 浏览:270
生日密码3号分别代表什么 发布:2024-12-28 13:02:10 浏览:315
奇瑞積架入门版配置是什么样的 发布:2024-12-28 12:28:35 浏览:207
王者微信安卓区哪个省分低 发布:2024-12-28 12:23:55 浏览:920
修改ons脚本 发布:2024-12-28 12:18:22 浏览:345
华为如何登录非渠道服务器 发布:2024-12-28 12:18:22 浏览:261
安卓炫彩是什么意思 发布:2024-12-28 12:15:28 浏览:958
从哪里换迷你世界密码 发布:2024-12-28 12:10:40 浏览:133
安卓相册误删怎么恢复 发布:2024-12-28 12:09:16 浏览:848
斐讯r1如何修改wifi配置 发布:2024-12-28 12:04:14 浏览:476