您的位置:首页 > 其它

VC读写XML文件

2012-09-09 23:30 453 查看
1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图:



在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。

编辑框:

 
IDCategoryVariable TypeVariable Name
IDC_IDValueCStringm_strId
IDC_AUTHORValueCStringm_strAuthor
IDC_TITLEValueCStringm_strTitle
按钮:

 

 
IDCaption
IDC_GENERATEGenerate
IDC_LOADLoad
 

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息