VC实现对XML文件的读写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC实现对XML文件的读写
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::DOMDocument4 0));
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);
本文来自: 中国自学编程网() 详细出处参考:/html/20070611/22861.html。