一、 1。寫一個(gè)xml文件 <?xml version="1.0" encoding="utf-8" ?> - <root> - <user id="101"> <name>abc</name> <password>abc</password> </user> - <user id="102"> <name>ccc</name> <password>ccc</password> </user> </root> 2。新建一個(gè)vc++2005工程 可以是對(duì)話框工程 因?yàn)橹皇桥e例說明 (1)在對(duì)話框的.H文件添加 #import "msxml3.dll" using namespace MSXML2; (2)在初始化函數(shù)里添加 try { CoInitialize(NULL);//初始化COM組件 MSXML2::IXMLDOMDocumentPtr pDoc; HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)) ;//創(chuàng)建一個(gè)COM進(jìn)程 if(!SUCCEEDED(hr)) { AfxMessageBox(_T("FAILSE"),MB_OK,NULL); } pDoc->load("d:\\user.xml");//xml文件的地址 我放在D盤下了 也可以寫成相對(duì)地址 MSXML2::IXMLDOMNodeListPtr pNodeList=NULL;//定義節(jié)點(diǎn)列表 pNodeList=pDoc->selectNodes("root/user");//選擇節(jié)點(diǎn) MSXML2::IXMLDOMNodePtr pSubNode; CString strTemp; for(int i=0;i<(pNodeList->Getlength());i++)//判斷有幾個(gè)節(jié)點(diǎn) { pSubNode=pNodeList->nextNode()->selectSingleNode("name"); _bstr_t strRequestType=pSubNode->Gettext(); strTemp=strRequestType.operator char*(); AfxMessageBox(strTemp,MB_OK,NULL); } } catch (...) { AfxMessageBox(_T("異常")); } 二、 #include <msxml6.h> #include <comutil.h> #pragma comment(lib, "comsuppwd.lib") void CXmlSampleDlg::OnBnClickedButton1()//按鈕事件 { CoInitialize(NULL); CComPtr<IXMLDOMDocument> spXmldoc; HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0"); if(SUCCEEDED(hr)) { VARIANT_BOOL isSuccessFul; CComVariant varXmlFile(L"a.xml"); spXmldoc->put_async(VARIANT_FALSE); HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul); if(isSuccessFul==VARIANT_TRUE) { CComBSTR bstrXml; CComPtr<IXMLDOMElement> spRoot=NULL; CComPtr<IXMLDOMElement> spTheBook=NULL; CComPtr<IXMLDOMElement> spTheElem=NULL; CComPtr<IXMLDOMNode> spNewNode=NULL; hr = spXmldoc->get_documentElement(&spRoot); spRoot->get_xml(&bstrXml); AfxMessageBox(L"1, 原始的XML"); AfxMessageBox(bstrXml); spXmldoc->createElement(L"book", &spTheBook); spXmldoc->createElement(L"name", &spTheElem); spTheElem->put_text(L"新書"); spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release(); spNewNode.Release(); spXmldoc->createElement(L"price", &spTheElem); spTheElem->put_text(L"20"); spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release(); spNewNode.Release(); spXmldoc->createElement(L"memo", &spTheElem); spTheElem->put_text(L"新書的更好看。"); spTheBook->appendChild(spTheElem, &spNewNode); spNewNode.Release(); spTheElem.Release(); spRoot->appendChild(spTheBook, &spNewNode); spNewNode.Release(); spTheBook.Release(); spRoot->get_xml(&bstrXml); AfxMessageBox(L"2, 新建一本書完成"); AfxMessageBox(bstrXml); ////--- 新建一本書完成 ---- ////--- 下面對(duì)《哈里波特》做一些修改。 ---- ////--- 查詢找《哈里波特》---- CComPtr<IXMLDOMNode> spTheNode=NULL; spRoot->selectSingleNode(L"/books/book[name='哈里波特']", &spTheNode); hr=spTheNode.QueryInterface(&spTheBook); spTheNode.Release(); spTheBook->get_xml(&bstrXml); AfxMessageBox(L"3,《哈里波特》的XML"); AfxMessageBox(bstrXml); ////--- 此時(shí)修改這本書的價(jià)格 ----- CComPtr<IXMLDOMNodeList> spNodeList=NULL; CComPtr<IXMLDOMNode> spListItem=NULL; spTheBook->get_childNodes(&spNodeList); spNodeList->get_item(1, &spListItem); spNodeList.Release(); spListItem->put_text(L"15"); ////--- 另外還想加一個(gè)屬性id,值為B01 ---- CComVariant varId(L"B01"); spTheBook->setAttribute(L"id", varId); varId.Clear(); spTheBook->get_xml(&bstrXml); spTheBook.Release(); AfxMessageBox(L"4, 對(duì)《哈里波特》修改完成。"); AfxMessageBox(bstrXml); ////--- 對(duì)《哈里波特》修改完成。 ---- ////--- 要用id屬性刪除《三國(guó)演義》這本書 ---- spRoot->selectSingleNode(L"/books/book[@id='B02']", &spTheNode); hr=spTheNode.QueryInterface(&spTheBook); spTheNode.Release(); spTheBook->get_xml(&bstrXml); AfxMessageBox(L"5, 《三國(guó)演義》的XML"); AfxMessageBox(bstrXml); CComPtr<IXMLDOMNode> spParentNode=NULL; spTheBook->get_parentNode(&spParentNode); spParentNode->removeChild(spTheBook, &spTheNode); spTheNode.Release(); spParentNode.Release(); spTheBook.Release(); spRoot->get_xml(&bstrXml); AfxMessageBox(L"6, 刪除《三國(guó)演義》后的XML"); AfxMessageBox(bstrXml); ////--- 再將所有價(jià)格低于10的書刪除 ---- spRoot->selectNodes(L"/books/book[price<10]", &spNodeList); CComQIPtr<IXMLDOMSelection> spSomeBooks=spNodeList; spNodeList.Release(); spSomeBooks->removeAll(); spSomeBooks.Release(); spXmldoc->get_xml(&bstrXml); AfxMessageBox(L"7, 已經(jīng)刪除價(jià)格低于10的書"); AfxMessageBox(bstrXml); spRoot.Release(); bstrXml.Empty(); //spXmldoc->save(varXmlFile); //保存xml。 } varXmlFile.ClearToZero(); } spXmldoc.Release(); CoUninitialize(); } <?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>哈里波特</name> <price>10</price> <memo>這是一本很好看的書。</memo> </book> <book id="B02"> <name>三國(guó)演義</name> <price>10</price> <memo>四大名著之一。</memo> </book> <book id="B03"> <name>水滸</name> <price>6</price> <memo>四大名著之一。</memo> </book> <book id="B04"> <name>紅樓</name> <price>5</price> <memo>四大名著之一。</memo> </book> </books> |
|