重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
用VC吧,下面有一個例子,你參照下:
成都創(chuàng)新互聯(lián)長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鳩江企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站,鳩江網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
void?CreateXml()
{
CoInitialize(NULL);
//?創(chuàng)建文檔
MSXML2::IXMLDOMDocument2Ptr?pXMLDoc?=?NULL;
//創(chuàng)建DOMDocument對象
HRESULT?hr?=?pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
if?(!SUCCEEDED(hr))
{
return;
}
//?Create?the?Processing?Instruction
MSXML2::IXMLDOMProcessingInstructionPtr?pXMLProc?=?NULL;
pXMLProc?=?pXMLDoc-createProcessingInstruction("xml",?"version='1.0'?encoding='UTF-8'");
_variant_t?vNullVal;
vNullVal.vt?=?VT_NULL;
pXMLDoc-insertBefore(pXMLProc,?vNullVal);
//?創(chuàng)建根結(jié)點
_variant_t?varNodeType((short)MSXML2::NODE_ELEMENT);
MSXML2::IXMLDOMNodePtr?pXMLNodeRoot=?NULL;?
pXMLNodeRoot?=?pXMLDoc-createNode(varNodeType,?_T("Cases"),?_T(""));
//?添加根結(jié)點
pXMLDoc-appendChild(pXMLNodeRoot);
//?創(chuàng)建并添加下級結(jié)點
MSXML2::IXMLDOMNodePtr?pXMLNodeNode=?NULL;?
pXMLNodeNode?=?pXMLNodeRoot-appendChild(pXMLDoc-createElement(_T("Case")));
//?創(chuàng)建下級元素結(jié)點
MSXML2::IXMLDOMElementPtr?pXMLEle?=?NULL;
pXMLEle?=?pXMLDoc-createElement(_T("CopyFile"));
//?創(chuàng)建并設(shè)置下級結(jié)點屬性
MSXML2::IXMLDOMAttributePtr?pXMLAttr?=?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);
//?添加元素結(jié)點
pXMLNodeNode-appendChild(?pXMLEle);
MSXML2::IXMLDOMElementPtr?pXMLEle1?=?NULL;
pXMLEle1?=?pXMLDoc-createElement(_T("DelFile"));
pXMLEle1-appendChild(pXMLDoc-createTextNode("C:\\test.txt"));
//?添加元素結(jié)點
pXMLNodeNode-appendChild(?pXMLEle1);
//?保存文檔
pXMLDoc-save(_T("d:\\Test.xml"));
}
效果如下:
?xml?version="1.0"?encoding="UTF-8"???
Cases
Case
CopyFile?src="C:\test.txt"?dest="D:\Test.txt"?/?
DelFileC:\test.txt/DelFile?
/Case
/Cases
為了能夠讓MFC認(rèn)識MSXML2,我們需要引入相應(yīng)的dll,代碼如下;
#import "msxml4.dll"
xml文件和txt文件相同,使用普通的文本操作函數(shù)即可讀取。
1、C語言標(biāo)準(zhǔn)庫提供了一系列文件操作函數(shù)。文件操作函數(shù)一般以f+單詞的形式來命名(f是file的簡寫),其聲明位于stdio.h頭文件當(dāng)中。例如:fopen、fclose函數(shù)用于文件打開與關(guān)閉;fscanf、fgets函數(shù)用于文件讀取;fprintf、fputs函數(shù)用于文件寫入;ftell、fseek函數(shù)用于文件操作位置的獲取與設(shè)置。
2、例程:
#includestdio.h
int?a;
char?b,c[100];
int?main(){
FILE?*?fp1?=?fopen("input.xml",?"r");//打開xml格式輸入文件
FILE?*?fp2?=?fopen("output.txt",?"w");//打開輸出文件
if?(fp1==NULL?||?fp2==NULL)?{//若打開文件失敗則退出
puts("不能打開文件!");
rturn?0;
}
fscanf(fp1,"%d",a);//從輸入文件讀取一個整數(shù)
b=fgetc(fp1);//從輸入文件讀取一個字符
fgets(c,100,fp1);//從輸入文件讀取一行字符串
printf("%ld",ftell(fp1));//輸出fp1指針當(dāng)前位置相對于文件首的偏移字節(jié)數(shù)
fputs(c,fp2);//向輸出文件寫入一行字符串
fputc(b,fp2);//向輸出文件寫入一個字符
fprintf(fp2,"%d",a);//向輸出文件寫入一個整數(shù)
fclose(fp1);//關(guān)閉輸入文件
fclose(fp2);//關(guān)閉輸出文件,相當(dāng)于保存
return?0;
}
把所有的數(shù)據(jù)當(dāng)做一個字符串
收到數(shù)據(jù)后先strstr(buffer,"?xml version=\"1.0\" encoding=\"UTF-8\"?");
如果返回的是NULL則表示沒有這段 退出
buffer是你收到的數(shù)據(jù)起始地址
/*?前段時間恰好做過類似的東西,代碼可以給你參考下。
*??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;
}
/*?調(diào)用此函數(shù)后,xml文件的內(nèi)容會被存儲到結(jié)構(gòu)體數(shù)組SrcFileFmt?srcfilefmt[]中
*?此函數(shù)依賴于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