简单的XML文件读写 (转)
来源:互联网 发布:java程序培训班哪个好 编辑:程序博客网 时间:2024/06/05 08:22
准备
开发工具:VS2005,
前提:安装msxml6解析器,ms网站可下载
通过向导创建VC++ MFC 工程,基于对话框
添加引用:
//在StdAfx.h中引入动态链接库 MSXML.DLL(C:/windows/system32/msxml6.dll)
#import <msxml6.dll>
编辑资源,添加控件
在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 ; //根节点的名称为Books xmlRoot=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();//调用读取的方法}
http://www.cnblogs.com/colys/archive/2009/07/09/1519806.html
- 简单的XML文件读写 (转)
- 读写XML文件的最简单方法
- unity3d 简单的xml文件读写操作
- 简单的xml读写
- XML的简单读写
- Perl 简单读写XML 文件
- xml文件的读写
- xml文件的读写
- xml文件的读写
- xml文件的读写
- XML文件的读写
- XML文件的读写
- XML文件的读写
- xml文件的读写
- 文件读写(xml)
- 简单的文件读写
- 简单的读写文件
- 简单的读写文件
- VB-Helper:坚守脚本
- java中Json格式数据的应用
- 亮度直方图中RGB转亮度的快速算法
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- SOAP 1.2
- 简单的XML文件读写 (转)
- 挑战自我!
- JAX-WS与JAX-RPC
- 理解“MFC的动态类型识别和动态创建”
- 培训费用统计查询3
- 细节要注意啊!typedef用不用的区别
- IF 语句
- 堆和栈(明确的说明了计算机堆和栈的区别,令我受益很多)
- 初次接触perl