MSXML读写的例子

1、目标文档:  

 <book id="bk101">
      <author>lizlex</author>
      <title>XML Developer's Guide</title>
   </book>

2、步骤:

(1)在StdAfx.h中引入动态链接库 MSXML.DLL(C:/windows/system32/msxml4.dll)
 #import <msxml4.dll>

(2)界面设计:
分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量m_strId,m_strAuthor, m_strTitle;并添加确定按钮:

(3)产生文档的程序片断
void CXmlparseDlg::OnButtonGenerate() 
{
 UpdateData();

 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"); 

}

(4)读取XML文档的程序片断
void CXmlparseDlg::OnButtonLoad() 
{
 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);
 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值