简单的XML文件读写
准备
开发工具:VS2005,
前提:安装msxml6解析器,ms网站可下载
通过向导创建VC++ MFC 工程,基于对话框
添加引用:
//在StdAfx.h中引入动态链接库 MSXML.DLL(C:\windows\system32\msxml6.dll)
#import
编辑资源,添加控件
![]()
在bookid对应的文本框右键,添加变量绑定(如下图,绑定控件值,变量名为:m_strId)
继续给另外两个文本框也绑定变量,分别为: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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
