小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C++ XML文件例子

 趙靜Library 2014-05-15
一、
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工程 可以是對話框工程 因?yàn)橹皇桥e例說明
(1)在對話框的.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盤下了 也可以寫成相對地址
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);
////---  新建一本書完成 ----


////---  下面對《哈里波特》做一些修改。 ----
////---  查詢找《哈里波特》----
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, 對《哈里波特》修改完成。");
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);


////---  再將所有價(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>三國演義</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>

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多