频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

如何用MSXML2操作XML配置文件

来源:天极网软件频道 作者:叶明的专栏 出处:巧巧读书 2007-12-07 进入讨论组

  在写应用程序时,配置文件一般用XML文件作为文件存储格式,那么就需要一个读取配置的方法,本文在Visual Studio.Net 2003中,用MSXML2库实现了DOM模型读取XML的模块,总结了一些主要的过程,仅供参考。

  本文目的:

  利用MSXML2库读取XML的过程Demo。

  本文内容:

  1. 导入库

以下是引用片段:
  #include "COMTemplates.h"
  #import "msxml2.dll"
  using namespace std;

  以上将MSXML2库包含进工程中。

  2. 初始化

  定义DOM模型中的文档对象

以下是引用片段:
  CComPtr m_spDoc;
  HRESULT hr = S_OK;

  初始化库对象

以下是引用片段:
  SafeCreateInstance(hr, m_spDoc, __uuidof(MSXML2::DOMDocument26));
  char *pPath="TSCprofiles.xml";
  CComBSTR Path = CComBSTR(pPath);

  将XML文件导入内存中的文档对象

以下是引用片段:
  VARIANT_BOOL success=m_spDoc->load(CComVariant(Path));

  3. 获取结点实例——已知结点名字

  一般用于获取根结点,因为不会出现几个同名根结点。CComPtr spNode;

以下是引用片段:
  CComPtr spChildren;

  获取文档中的所有一级结点(结点名= RequiredNodeName)

以下是引用片段:
  m_spDoc->documentElement->get_childNodes(&spChildren);
  long NumChildren = 0;
  spChildren->get_length(&NumChildren);
  CComBSTR NodeName;
  int i = 0;
  spChildren->item[i]->get_nodeName(&NodeName);

  遍历结点名字

以下是引用片段:
  while ((NodeName != RequiredNodeName) && (++i < NumChildren))
  {
  NodeName.Empty();
  spChildren->item[i]->get_nodeName(&NodeName);
  }
  if (i < NumChildren)
  {
  spNode = spChildren->item[i];
  }
  return spNode;

  4. 读取子结点——已知父结点及子结点名

  在获得根结点后,一般会有若干子结点,根据自结点名字获得子结点的方法很有用。

以下是引用片段:
  CTSCInstallHelperDlg::getChildNodeByName(CComPtr spParentNode, BSTR nodeName,CComPtr& spChildNode)
  {
  ASSERT(spParentNode!=NULL);
  CComPtr spChildrens;
  spParentNode->get_childNodes(&spChildrens);
  long count=0;
  spChildrens->get_length(&count);
  for(int len=0;len 
  {
  spChildrens->get_item(len,&spChildNode);
  BSTR name;
  spChildNode->get_nodeName(&name);
  if(wcscmp(name,nodeName)==0)
  return;
  spChildNode=NULL;
  }
  spChildNode=NULL;
  }

  5. 读取属性值——已知结点及属性名

  属性其实相当于一个子结点。

以下是引用片段:
  BSTR CTSCInstallHelperDlg::getAttributeByName(CComPtr spEnumNode, BSTR attrName)
  {
  CComPtr attrs;
  spEnumNode->get_attributes(&attrs);

  在子结点属性列表中取对应属性

以下是引用片段:
  MSXML2::IXMLDOMNodePtr attr=attrs->getNamedItem(attrName);

  返回属性值

以下是引用片段:
  return attr->text;

  6. 释放库

  最后一定要释放库,否则会出现异常和内存泄漏

以下是引用片段:
  m_spDoc->Release()

本文:http://www.qqread.com/xml-soap/s384603.html 更多文章 更多内容请看电脑配置手册服务器配置专栏XML详解专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章