简单的XML文件读写

准备

开发工具:VS2005,

前提:安装msxml6解析器,ms网站可下载

通过向导创建VC++ MFC 工程,基于对话框

添加引用:

//在StdAfx.h中引入动态链接库 MSXML.DLL(C:\windows\system32\msxml6.dll)
#import

编辑资源,添加控件

image

在bookid对应的文本框右键,添加变量绑定(如下图,绑定控件值,变量名为:m_strId)

image

继续给另外两个文本框也绑定变量,分别为:m_strAuthor,m_strTitle

定义全局变量

MSXML2::IXMLDOMDocumentPtr pDoc;//xml文档指针
long bookIndex,bookCount ;//xml内容中,当前索引与book数量,用于显示”上一条记录”和”下一条记录”
_bstr_t xmlfile;//xml文档路径

注册事件

双击各个按键,添加事件绑定

写入xml方法:

void CMFC2005Dlg::OnBnClickedButtonWritexml()
{UpdateData();if (pDoc!=NULL) pDoc=NULL;//创建DOMDocument对象HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));if(!SUCCEEDED(hr)){  MessageBox( _T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));return ;}MSXML2::IXMLDOMElementPtr xmlRoot ;//根节点的名称为BooksxmlRoot=pDoc->createElement((_bstr_t)"Books");//创建个book节点for (int i=0;i<10;i++){//创建book元素并添加到books中MSXML2::IXMLDOMElementPtr xmlBootNode ;xmlBootNode=pDoc->createElement((_bstr_t)"Book");//设置属性CString idvalue;idvalue.Format(_T("%s%d"), m_strId, i);xmlBootNode->setAttribute("id",(_bstr_t)idvalue);//下级结点MSXML2::IXMLDOMElementPtr pNode;//添加“author”元素CString authorValue ;authorValue.Format(_T("%s%d"),m_strAuthor,i);pNode=pDoc->createElement((_bstr_t)"Author");pNode->Puttext((_bstr_t)authorValue);xmlBootNode->appendChild(pNode);//添加“Title”元素CString titleValue ;titleValue.Format(_T("%s%d"),m_strTitle,i);pNode=pDoc->createElement("Title");pNode->Puttext((_bstr_t)titleValue);xmlBootNode->appendChild(pNode);xmlRoot->appendChild(xmlBootNode);pNode= NULL;xmlBootNode = NULL;}pDoc->appendChild(xmlRoot);//保存到文件,如果不存在就建立,存在就覆盖pDoc->save(xmlfile);    
}

 

读取xml方法:

void CMFC2005Dlg::OnBnClickedButtonReadxml()
{if (pDoc==NULL){if( (_access( xmlfile, 0 )) == -1 ){MessageBox(_T("无法载入xml文件,请确定文件存在!"));return;}        HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));if(FAILED(hr)){  MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));return ;}        try{//加载文件pDoc->load(xmlfile);}catch (CFileException* e){MessageBox(_T("无法载入xml文件,请确定文件存在并且允许访问!"));            pDoc = NULL;return ;}    }MSXML2::IXMLDOMNodeListPtr books = pDoc->GetdocumentElement()->GetchildNodes();    books->get_length( &bookCount) ;if(bookIndex >bookCount) {if (bookIndex ==0) return;bookIndex =0;}MSXML2::IXMLDOMNodePtr   pNode;//查询第bookIndex个book节点pNode= books->Getitem(bookIndex);//节点属性,放在链表中MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap=NULL;MSXML2::IXMLDOMNodePtr    pAttrItem;_variant_t variantvalue;pNode->get_attributes(&pAttrMap);//获取id属性的值pAttrMap->get_item(0,&pAttrItem);m_strId =(LPTSTR) pAttrItem->Gettext();//取得author和title节点的值MSXML2::IXMLDOMNodeListPtr pNodeChildren= pNode->GetchildNodes();m_strAuthor = (LPTSTR) pNodeChildren->Getitem(0)->Gettext();m_strTitle = (LPTSTR) pNodeChildren->Getitem(1)->Gettext();UpdateData(FALSE);}

 

上一条记录与下一条记录按钮的方法

//上一条记录
void CMFC2005Dlg::OnBnClickedButtonPrevbook()
{if(bookCount < 1) return;if(bookIndex > 0) bookIndex --;else bookIndex = bookCount-1;OnBnClickedButtonReadxml();//调用读取的方法
}//下一条记录
void CMFC2005Dlg::OnBnClickedButtonNextbook()
{if(bookCount < 1) return;if(bookIndex < bookCount - 1) bookIndex ++;else bookIndex = 0;OnBnClickedButtonReadxml();//调用读取的方法
}

转载于:https://www.cnblogs.com/colys/archive/2009/07/09/1519806.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部