免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

c語言xml處理函數,c語言解析xml

怎么用C語言寫一個簡單的XML文件

用VC吧,下面有一個例子,你參照下:

創新互聯公司是一家集網站建設,青山企業網站建設,青山品牌網站建設,網站定制,青山網站建設報價,網絡營銷,網絡優化,青山網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

void?CreateXml()

{

CoInitialize(NULL);

//?創建文檔

MSXML2::IXMLDOMDocument2Ptr?pXMLDoc?=?NULL;

//創建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);

//?創建根結點

_variant_t?varNodeType((short)MSXML2::NODE_ELEMENT);

MSXML2::IXMLDOMNodePtr?pXMLNodeRoot=?NULL;?

pXMLNodeRoot?=?pXMLDoc-createNode(varNodeType,?_T("Cases"),?_T(""));

//?添加根結點

pXMLDoc-appendChild(pXMLNodeRoot);

//?創建并添加下級結點

MSXML2::IXMLDOMNodePtr?pXMLNodeNode=?NULL;?

pXMLNodeNode?=?pXMLNodeRoot-appendChild(pXMLDoc-createElement(_T("Case")));

//?創建下級元素結點

MSXML2::IXMLDOMElementPtr?pXMLEle?=?NULL;

pXMLEle?=?pXMLDoc-createElement(_T("CopyFile"));

//?創建并設置下級結點屬性

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

//?添加元素結點

pXMLNodeNode-appendChild(?pXMLEle);

MSXML2::IXMLDOMElementPtr?pXMLEle1?=?NULL;

pXMLEle1?=?pXMLDoc-createElement(_T("DelFile"));

pXMLEle1-appendChild(pXMLDoc-createTextNode("C:\\test.txt"));

//?添加元素結點

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認識MSXML2,我們需要引入相應的dll,代碼如下;

#import "msxml4.dll"

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的接口函數

/***************

?xml?version="1.0"?encoding="utf-8"?

Cases

case

No001/No

CopyFile?src="C:\test.txt"?dest="D:\test.txt"/CopyFile

/case

case

No002/No

DelFileC:\test.txt/DelFile

/case

/Cases

*******************/

//?我們用MFC來讀取上述xml,代碼如下:

void?ReadXml(CString?strXmlPath)

{

MSXML2::IXMLDOMDocumentPtr?pDoc;

::CoInitialize(NULL);

HRESULT?hr?=?pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));?

if?(!SUCCEEDED(hr))?

{??

MessageBox(_T("創建DOMDocument對象失敗。\n請檢查運行環境"),?_T("錯誤"),?MB_ICONERROR);?

return;

}

//?讀取xml

pDoc-put_async(VARIANT_FALSE);

VARIANT_BOOL?bhr?=?pDoc-load((_variant_t)strXmlPath);

if?(bhr?!=?VARIANT_TRUE)?{

MessageBox(_T("無法正確讀取xml文件"),?_T("錯誤"),?MB_ICONERROR);

return;

}

//?根節點取得

MSXML2::IXMLDOMElementPtr?root?=?pDoc-documentElement;

//?取得根節點的名字

_variant_t?strRootName?=?root-nodeName;

_bstr_t?wstrRootName(strRootName.bstrVal);

MSXML2::IXMLDOMNodeListPtr?nodeList?=?root-GetchildNodes();//cases

//?解析cases的子節點

ReadCases(nodeList);

}

void?ReadCases(MSXML2::IXMLDOMNodeListPtr?nodeList)

{

int?ilength?=?nodeList-Getlength();

for?(int?nodeCount?=?0;?nodeCount??ilength;?nodeCount++)?{

MSXML2::IXMLDOMNodePtr?nodePtr?=?nodeList-nextNode();

_variant_t?strNodeName?=?nodePtr-GetnodeName();

_variant_t?strNodeValue?=?nodePtr-GetnodeValue();

//?讀取case節點下的子節點

ReadCase(nodePtr-GetchildNodes());

}

}

void?ReadCase(MSXML2::IXMLDOMNodeListPtr?nodeList)

{

CString?strLogInfo;

strLogInfo.Empty();

CString?strNo;??????????????//?case編號

CString?strSrcFile;?????????//?源文件

CString?strDestFile;????????//?目標文件

for?(int?nodeCount?=?0;?nodeCount??nodeList-Getlength();?nodeCount++)

{

MSXML2::IXMLDOMNodePtr?nodePtr?=?nodeList-nextNode();

_variant_t?strCaseNodeName?=?nodePtr-GetnodeName();

_variant_t?strCaseNodeValue?=?nodePtr-Gettext();

BSTR?bStrTemp?=?strCaseNodeName.bstrVal;

CString?strTemp?=?CString(bStrTemp);

SysFreeString(bStrTemp);

CString?strNodeName?=?strTemp;

//??節點的值,如何取得?

if?(0?==?strNodeName.CompareNoCase(_T("NO")))

{

strNo?=?(BSTR)strCaseNodeValue.pbstrVal;

//?取得的值可以打印出來

printf(strNo);

}

//?節點有屬性值,該怎么處理?

else?if?(0?==?strNodeName.CompareNoCase(_T("CopyFile")))

{

strSrcFile.Empty();

strDestFile.Empty();

//?取得節點的屬性值

MSXML2::IXMLDOMNamedNodeMapPtr?pDOMAttrList=?nodePtr-Getattributes();

for?(int?j?=?0;?j??pDOMAttrList-Getlength();?j++)

{

MSXML2::IXMLDOMNodePtr?pDOMAttr=?pDOMAttrList-Getitem(j);?

//?取得源文件路徑

if?(CompareNoCase((char*)pDOMAttr-GetnodeName(),?_T("src")))

{

strSrcFile?=?pDOMAttr-GetnodeTypedValue();

//?取得目標文件路徑

}?else?if?(CompareNoCase((char*)pDOMAttr-GetnodeName(),?_T("dest")))

{

strDestFile?=pDOMAttr-GetnodeTypedValue();

}

CopyFile(strSrcFile,?strDestFile,?FALSE);

}

else?if?(0?==?strNodeName.CompareNoCase(_T("DelFile")))

{

strDestFile.Empty();

strDestFile?=?CString((BSTR)strCaseNodeValue.pbstrVal);

DeleteFile(strDestFile);

}?

}

}

//?為了能夠讓MFC認識MSXML2,我們需要引入相應的dll,代碼如下;

#import?"msxml4.dll"

C語言xml解析

把所有的數據當做一個字符串

收到數據后先strstr(buffer,"?xml version=\"1.0\" encoding=\"UTF-8\"?");

如果返回的是NULL則表示沒有這段 退出

buffer是你收到的數據起始地址

名稱欄目:c語言xml處理函數,c語言解析xml
網站地址:http://m.newbst.com/article36/dssgdpg.html

成都網站建設公司_創新互聯,為您提供網頁設計公司定制網站服務器托管品牌網站制作虛擬主機搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設