AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

VC++中利用MSXML解析XML文档

51自学网 2015-08-30 http://www.wanshiok.com

  四、程序实现

  下面通过一个具体的实例来说明在VC++中如何利用MSXML解析XML文档。

  (1)源XML文档(xmlfile.xml)如下:

  <?xml version="1.0" encoding="GB2312"?>
  <Device id="10041" name="设备1">
  <Type>13</Type>
  <TypeName>保护</TypeName>
  </Device>

  我们在源文档中查找"Device",将其"name"属性设置为"测试设备",为其添加"Model"节点,并设置其文本为"3"。

  (2)源程序如下:

  CoInitialize(NULL); // 初始化COM。
  CComPtr<IXMLDOMDocument> spXMLDOM;
  HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));
  // 创建解析器实例。
  VARIANT_BOOL bSuccess=false;
  hr=spXMLDOM->load(CComVariant(L"xmlfile.xml"),&bSuccess);
  // 装载XML文档。
  CComBSTR bstrSS(L"Device");
  CComPtr<IXMLDOMNode> spDevice;
  hr=spXMLDOM->selectSingleNode(bstrSS,&spDevice); //搜索"Device"。
  CComQIPtr<IXMLDOMElement> spDev;
  spDev=spDevice;
  // 设置"Device"的"name"属性。
  hr= spDev ->setAttribute(CComBSTR(L"name"),CComVariant("测试设备"));
  CComPtr<IXMLDOMNode> spModelNode; hr=spXMLDOM->createNode(CComVariant(NODE_ELEMENT),ComBSTR
  ("Model"),NULL,& spModelNode); // 创建"Model"节点。
  CComPtr<IXMLDOMNode> spInsertedNode;
  hr=spDevice->appendChild (spModelNode,&spInsertedNode);
  // 添加新节点到"Device"节点下面。
  CString strID="3";
  hr=spInsertedNode->put_text(strID.AllocSysString());// 设置"Model"的文本。
  hr=spXMLDOM->save(CComVariant("xmlfile.xml")); / /保存文档。
  CoUninitialize(); // 结束对COM的使用。

  因为篇幅的原因,上述代码的每步操作并未对返回的HRESULT类型进行判断,也未进行异常的捕获处理,在实际的编程中读者应根据返回的hr进行决断,以决定程序的流程,同时应进行异常的捕获处理。

  (3) 修改后的XML文档如下

  <?xml version="1.0" encoding="GB2312"?>
  <Device id="10041" name="测试设备">
  <Type>13</Type>
  <TypeName>保护</TypeName>
  <Model>3</Model>
  </Device>

  五、结束语

  因为XML文档有着比HTML更严格的语法要求,所以使用和编写一个XML解析器要比编写一个HTML解析器要容易得多。同时因为XML文档不仅可以 标记文档的显示属性,更重要的是它标记了文档的结构和包含信息的特征,所以我们可以方便地通过XML解析器来获取特定节点的信息并加以显示或修改,方便了 用户对XML文档的操作和维护。同时我们需要注意的是,XML是一种开放的结构体系,并不依赖于任何一家公司,所以开发基于XML的应用必然会得到绝大多 数软件开发平台的支持。

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:最常见的20种VC++编译错误信息  下一篇:深入浅出MFC文档/视图架构之基本概念