一、 1。写一个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。新建一个vc++2005工程 可以是对话框工程 因为只是举例说明 (1)在对话框的.H文件添加 #import "msxml3.dll" using namespace MSXML2; (2)在初始化函数里添加 try { CoInitialize(NULL);//初始化COM组件 MSXML2::IXMLDOMDocumentPtr pDoc; HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)) ;//创建一个COM进程 if(!SUCCEEDED(hr)) { AfxMessageBox(_T("FAILSE"),MB_OK,NULL); } pDoc->load("d:\\user.xml");//xml文件的地址 我放在D盘下了 也可以写成相对地址 MSXML2::IXMLDOMNodeListPtr pNodeList=NULL;//定义节点列表 pNodeList=pDoc->selectNodes("root/user");//选择节点 MSXML2::IXMLDOMNodePtr pSubNode; CString strTemp; for(int i=0;i<(pNodeList->Getlength());i++)//判断有几个节点 { 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); ////--- 新建一本书完成 ---- ////--- 下面对《哈里波特》做一些修改。 ---- ////--- 查询找《哈里波特》---- 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); ////--- 此时修改这本书的价格 ----- CComPtr<IXMLDOMNodeList> spNodeList=NULL; CComPtr<IXMLDOMNode> spListItem=NULL; spTheBook->get_childNodes(&spNodeList); spNodeList->get_item(1, &spListItem); spNodeList.Release(); spListItem->put_text(L"15"); ////--- 另外还想加一个属性id,值为B01 ---- CComVariant varId(L"B01"); spTheBook->setAttribute(L"id", varId); varId.Clear(); spTheBook->get_xml(&bstrXml); spTheBook.Release(); AfxMessageBox(L"4, 对《哈里波特》修改完成。"); AfxMessageBox(bstrXml); ////--- 对《哈里波特》修改完成。 ---- ////--- 要用id属性删除《三国演义》这本书 ---- spRoot->selectSingleNode(L"/books/book[@id='B02']", &spTheNode); hr=spTheNode.QueryInterface(&spTheBook); spTheNode.Release(); spTheBook->get_xml(&bstrXml); AfxMessageBox(L"5, 《三国演义》的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, 删除《三国演义》后的XML"); AfxMessageBox(bstrXml); ////--- 再将所有价格低于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, 已经删除价格低于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>三国演义</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> |
|