VC实现对XML文件的读写
点击:0 发布日期:2007-6-11 13:29:00 进入论坛 1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图:
在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。
编辑框: ID Category Variable Type Variable Name IDC_ID Value CString m_strId IDC_AUTHOR Value CString m_strAuthor IDC_TITLE Value CString m_strTitle 按钮: ID Caption IDC_GENERATE Generate IDC_LOAD Load 2、在App类的InitInstance函数里面加入如下代码:
// Com口初始化
AfxOleInit(); 3、在StdAfx.h中引入动态链接库 MSXML.DLL(C:\windows\system32\msxml4.dll)
#import < msxml4.dll >
4、双击Generate按钮,在消息处理函数中添加如下代码:
UpdateData(TRUE);
MSXML2::IXMLDOMDocumentPtr pDoc; MSXML2::IXMLDOMElementPtr xmlRoot ; // 创建DOMDocument对象 HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if ( ! SUCCEEDED(hr)) { MessageBox( " 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! " ); return ; } // 根节点的名称为Book // 创建元素并添加到文档中 xmlRoot = pDoc -> createElement((_bstr_t) " Book " ); // 设置属性 xmlRoot -> setAttribute( " id " ,( const char * )m_strId); pDoc -> appendChild(xmlRoot); MSXML2::IXMLDOMElementPtr pNode; // 添加“author”元素 pNode = pDoc -> createElement((_bstr_t) " Author " ); pNode -> Puttext((_bstr_t)( const char * )m_strAuthor); xmlRoot -> appendChild(pNode); // 添加“Title”元素 pNode = pDoc -> createElement( " Title " ); pNode -> Puttext(( const char * )m_strTitle); xmlRoot -> appendChild(pNode); // 保存到文件 // 如果不存在就建立,存在就覆盖 pDoc -> save( " d:\\he.xml " ); 双击Load按钮,在消息处理函数中添加如下代码: MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr; hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if (FAILED(hr)) { MessageBox( " 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! " ); return ; } // 加载文件 pDoc -> load( " d:\\he.xml " ); MSXML2::IXMLDOMNodePtr pNode; // 在树中查找名为Book的节点," // "表示在任意一层查找 pNode = pDoc -> selectSingleNode( " //Book " ); MSXML2::DOMNodeType nodeType; // 得到节点类型 pNode -> get_nodeType( & nodeType); // 节点名称 CString strName; strName = ( char * )pNode -> GetnodeName(); // 节点属性,放在链表中 MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL; MSXML2::IXMLDOMNodePtr pAttrItem; _variant_t variantvalue; pNode -> get_attributes( & pAttrMap); long count; count = pAttrMap -> get_length( & count); pAttrMap -> get_item( 0 , & pAttrItem); // 取得节点的值 pAttrItem -> get_nodeTypedValue( & variantvalue); m_strId = ( char * )(_bstr_t)variantvalue; UpdateData(FALSE); 本文来自: 中国自学编程网(www.) 详细出处参考:http://www./html/20070611/22861.html
|
|