<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 13,comments - 0,trackbacks - 0

    這里是利用COM組建對(duì)xml文件進(jìn)行操作,所以程序進(jìn)入時(shí)要進(jìn)行COM組件的初始化和卸載

    ::CoInitialize(NULL); 和 ::CoUninitialize();要對(duì)應(yīng)

    為了不影響其他地方的操作,最好把這個(gè)放在項(xiàng)目的開始和結(jié)束

    你也可以使用AfxOleInit();他對(duì)CoInitialize進(jìn)行了封裝,具體的區(qū)別可以到網(wǎng)上查一下

    另外確保安裝了MS XML Parser 運(yùn)行庫(kù)

     

     

    使用時(shí)需要加上

    #import <msxml3.dll>
     

    下面的兩個(gè)函數(shù)就是對(duì)xml文件的操作,大部分操作都已涉及

     

    ///////////////////////////////////////////////////////////////////////////////
    #import <msxml3.dll>
    typedef MSXML2::IXMLDOMDocumentPtr DOMDocumentPtr;
    typedef MSXML2::IXMLDOMElementPtr DOMElementPtr;
    typedef MSXML2::IXMLDOMProcessingInstructionPtr	DOMProInstructionPtr;
    typedef MSXML2::IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;
    typedef MSXML2::IXMLDOMNodeListPtr DOMNodeListPtr;
    typedef MSXML2::IXMLDOMNodePtr DOMNodePtr;
    typedef MSXML2::IXMLDOMTextPtr DOMTextPtr;
    ///////////////////////////////////////////////////////////////////////////////
    int ReadXML(CString szXMLFile)
    {
    	if (szXMLFile.IsEmpty())
    		return -1;
    
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對(duì)應(yīng)
    	// 這里可以這么使用,但以后盡量在程序開始調(diào)用,程序結(jié)束卸載,否則可能會(huì)影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調(diào)用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    	
    	// 創(chuàng)建DOMDocument對(duì)象,并判斷是否創(chuàng)建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創(chuàng)建DOMDocument對(duì)象,請(qǐng)檢查是否安裝了MS XML Parser 運(yùn)行庫(kù)!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	if(pXMLDoc->load(_variant_t(szXMLFile)) == FALSE)
    	{
    		MessageBox(NULL, "無法打開存檔!", "Error", MB_ICONERROR|MB_OK);
    		return -2;
    	}
    
    	// 是否有根節(jié)點(diǎn),取得根節(jié)點(diǎn)
    	DOMElementPtr pRootElem = pXMLDoc->GetdocumentElement();
    	if (pRootElem == NULL)
    		return -3;
    
    	// 取得根節(jié)點(diǎn)的名字
    	szText = (char*)(pRootElem->GetnodeName());
    
    	// 在根節(jié)點(diǎn)下查找名叫Globals的節(jié)點(diǎn)并取得
    	DOMNodePtr pGlobalNode = pRootElem->selectSingleNode("Globals");
    	if (pGlobalNode == NULL)
    		return -3;
    	
    	// 取得屬性列表
    	DOMNamedNodeMapPtr pNodeMap = pGlobalNode->Getattributes();
    
    	// 根據(jù)名字直接取得屬性節(jié)點(diǎn)并獲取值
    	DOMNodePtr pAttribNode = pNodeMap->getNamedItem("Attrib");
    	szText = (char *)(pAttribNode->Gettext());
    	pAttribNode = pNodeMap->getNamedItem("作用");
    	szText = (char *)(pAttribNode->Gettext());
    
    	// 另外在有些情況下Node可以轉(zhuǎn)換成Element使用
    	DOMElementPtr pGlobalElem = pGlobalNode;
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("Attrib"));
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("作用"));
    	
    	// 如果不知道名字可以取得屬性的個(gè)數(shù),逐個(gè)查找屬性
    	long len = pNodeMap->Getlength();
    	for (int i=0; i<len; ++i)
    	{
    		pAttribNode = pNodeMap->Getitem(i);
    		szText = (char *)(pAttribNode->GetnodeName());	// 取得屬性名字
    		szText = (char *)(pAttribNode->Gettext());		// 取得屬性值
    	}
    	
    	DOMNodePtr pTempNode;
    	// 取得Globals下的子節(jié)點(diǎn)
    	if((pTempNode = pGlobalNode->GetfirstChild()))
    	{
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    
    		// 循環(huán)取得相鄰的節(jié)點(diǎn)
    		while((pTempNode = pTempNode->GetnextSibling()))
    		{
    			szText = (char*)pTempNode->GetnodeName();
    			szText = (char*)pTempNode->Gettext();
    		}
    	}
    
    	// 從根節(jié)點(diǎn)中查找Data的子節(jié)點(diǎn)
    	DOMNodePtr pDataNode = pRootElem->selectSingleNode("Data");
    	if (pDataNode == NULL)
    		return -1;
    
    	// 從Data節(jié)點(diǎn)下列取出所有叫Data的節(jié)點(diǎn)
    	DOMNodeListPtr pDataList = pDataNode->selectNodes("Data");
    	len = pDataList->Getlength();
    	for(i=0; i<len; ++i)
    	{
    		pTempNode = pDataList->Getitem(i);
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    	}
    
    	// 確保卸載掉所有的對(duì)象才能調(diào)用CoUninitialize
    	if(pNodeMap)pNodeMap.Detach();
    	if(pAttribNode)pAttribNode.Detach();
    	if(pTempNode)pTempNode.Detach();
    	if(pGlobalNode)pGlobalNode.Detach();
    	if(pGlobalElem)pGlobalElem.Detach();
    	if(pDataNode)pDataNode.Detach();
    	if(pDataList)pDataList.Detach();
    	if(pRootElem)pRootElem.Detach();
    	if(pXMLDoc)pXMLDoc.Detach();
    
    	// 卸掉COM,必須與CoInitialize對(duì)應(yīng)
    	::CoUninitialize();
    	return 0;
    }
    
    int SaveXML(CString szXMLFile)
    {
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對(duì)應(yīng)
    	// 這里可以這么使用,但以后盡量在程序開始調(diào)用,程序結(jié)束卸載,否則可能會(huì)影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調(diào)用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    
    	// 創(chuàng)建DOMDocument對(duì)象,并判斷是否創(chuàng)建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創(chuàng)建DOMDocument對(duì)象,請(qǐng)檢查是否安裝了MS XML Parser 運(yùn)行庫(kù)!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	// 創(chuàng)建頭節(jié)點(diǎn)
    	DOMProInstructionPtr pXmlProNode = pXMLDoc->createProcessingInstruction(_bstr_t("xml"),_bstr_t("version=\"1.0\" encoding = \"GB2312\""));
    	pXMLDoc->appendChild((MSXML2::IXMLDOMNodePtr)pXmlProNode);	
    	pXmlProNode.Detach();	//以后不再用的,卸掉
    
    	// 創(chuàng)建并添加根節(jié)點(diǎn)
    	// 創(chuàng)建一個(gè)節(jié)點(diǎn)
    	DOMElementPtr pXmlRoot = pXMLDoc->createElement("root");
    	// 添加到文檔中
    	pXMLDoc->appendChild(pXmlRoot);
    
    	// 創(chuàng)建一個(gè)節(jié)點(diǎn)
    	DOMElementPtr pGlobalNode = pXMLDoc->createElement("Globals");
    	// 添加到根節(jié)點(diǎn)中
    	pXmlRoot->appendChild(pGlobalNode);
    
    	// 添加兩個(gè)屬性
    	pGlobalNode->setAttribute("Attrib", "Value");
    	pGlobalNode->setAttribute("作用", "記錄全局?jǐn)?shù)據(jù)");
    
    	DOMElementPtr pTempNode = pXMLDoc->createElement("Author");
    	pTempNode->Puttext("Ren.Xia");// 添加內(nèi)容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    
    	pTempNode = pXMLDoc->createElement("Date");
    	pTempNode->Puttext("2011-02-12");// 添加內(nèi)容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    	pGlobalNode.Detach();
    
    	// 在Root下創(chuàng)建Data子節(jié)點(diǎn)
    	DOMElementPtr pDataNode = pXMLDoc->createElement("Data");
    	pDataNode->setAttribute("Attrib", "Value");
    	pDataNode->setAttribute("作用", "記錄數(shù)據(jù)");
    	pXmlRoot->appendChild(pDataNode);
    
    	for (int i=0; i<100; ++i)
    	{
    		pTempNode = pXMLDoc->createElement("Data");
    		szText.Format("%d", i);
    		pTempNode->Puttext((_bstr_t)szText);
    		pDataNode->appendChild(pTempNode);
    		pTempNode.Detach();
    	}
    	pDataNode.Detach();
    
    	// 判斷名字是否為空
    	if (szXMLFile.IsEmpty())
    	{
    		pXmlRoot.Detach();
    		pXMLDoc.Detach();
    		return -2;
    	}
    
    	// 存儲(chǔ)并判斷是否成功
    	hr = pXMLDoc->save((LPCTSTR)szXMLFile);
    	pXmlRoot.Detach();
    	pXMLDoc.Detach();
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法保存!", "Error", MB_ICONERROR|MB_OK);
    		return -3;
    	}	
    	MessageBox(NULL, "保存完畢!", "Error", MB_ICONASTERISK|MB_OK);
    	
    	// 卸掉COM,必須與CoInitialize對(duì)應(yīng)
    	::CoUninitialize();
    	return 0;
    }


     

    另外如果知道一個(gè)節(jié)點(diǎn)的名字"Data",但是不知道在哪一層,那個(gè)樹下

    可以在查找時(shí)名字前加個(gè)"http://"這樣就表示在任意一層查找  

     

    pRootElem->selectSingleNode(" //Data");
     

     



      本文附件下載:
    • XML.rar (484.4 KB)
    posted on 2011-02-14 14:17 CrackRen 閱讀(118) 評(píng)論(0)  編輯  收藏 所屬分類: VC

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲免费视频在线观看| 韩国日本好看电影免费看| 国产亚洲精品看片在线观看| 久久久久亚洲AV无码麻豆| a级在线观看免费| 久久99国产亚洲精品观看| 无码人妻精品中文字幕免费| 亚洲av无码片在线播放| 麻豆69堂免费视频| 免费永久国产在线视频| 一个人看的免费视频www在线高清动漫| 一级特黄aaa大片免费看| 亚洲成aⅴ人片久青草影院| 一级毛片在播放免费| 久久国产亚洲精品麻豆| 永久免费在线观看视频| 中文字幕亚洲情99在线| 国产精品久久久久影院免费| 美女啪啪网站又黄又免费| 亚洲一区二区三区影院| 国产亚洲精品成人久久网站| 99热免费在线观看| 亚洲精品无码av人在线观看| 毛片免费在线观看| 国产亚洲精aa在线看| 亚洲AV无码成H人在线观看| 久久亚洲免费视频| 久久精品国产亚洲香蕉| 免费在线看v网址| 亚洲一级毛片免费观看| 国产免费av一区二区三区| 二区久久国产乱子伦免费精品| 亚洲国产午夜中文字幕精品黄网站 | 日韩精品免费一线在线观看| 成年人视频在线观看免费| 黄色a级免费网站| 亚洲黄网站wwwwww| 亚洲精品第一国产综合精品99| 无码免费一区二区三区免费播放| 亚洲精品无码高潮喷水A片软| 国产亚洲高清不卡在线观看|