热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

四、程序实现下面通过一个具体的实例来说明在VC++中如何利用MSX

四、程序实现

  下面通过一个具体的实例来说明在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;

http://www.gaodaima.com/33865.htmlVC++中利用MSXML解析XML文档_xml

  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的应用必然会得到绝大多 数软件开发平台的支持。  一、 XML 简介

  XML(Xtensible Markup Language,即扩展标记语言)的发展起源于1996年。当时,出版界巨头和web业内人士经过共同讨论,提出了创建SGML(Standard Generalized Markup Language,即标准通用标识语言)子集(HML)的建议。该子集专用于Web,具有可扩展(或可扩充)性,并且能利用结构化标记语言的所有高级功 能,但摒弃了SGML的复杂性。XML规范的第一份草稿于1996年11月发布后不久,1997年1月首个XML解析器就面世了。随后,便出现了XML的 应用以及新的规范和解析器。

  HTML(Hypertext Markup Language)语言是大家所熟悉的开发网页的一种标记语言,但它不是一种编程语言,它的主要标记是针对文档内容本身结构的描述,因机器本身是不能够解 析它的内容的。XML语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大减小了SGML的复杂性。它不仅能表示文档的内容,而且可以表 示文档的结构,这样在能够被人类理解的同时,也能够被机器所理解。虽然HTML是SGML的一个应用,XML是SGML的一个子集,但是XML绝不是在 HTML上添加某些元素而形成的,它们之间是有很大区别的。最大的区别就是XML允许使用者为某种特殊目的而定义自已的元素。除此之外,另一个最主要的区 别就是XML致力解决的问题,正是在使用HTML时所遇到的一些特殊问题。

  XML要求遵循一定的严格标准,其分析程序比HTML浏览器对语法和结构的要求更加严格。XML文档每次分析的结果都一致,而HTML在不同的浏览器 中可能会作出不同的分析和显示。同时,XML标准是对数据的处理应用,而不只是针对Web页的,它还可涉及到数据库电子商务系统,以及任何显示系统的高级 应用。开发者可根据特定的工业需求,利用XML创建自定义的数据结构。这些数据结构和数据库可以在许多设备上查看,而不需要使用自定义的接口在不同的显示 设备上查看相同的数据。

  XML主要有三个要素:文档类型声明(DTD:Document Type Declaration)或XML Schema(XML大纲)、可扩展样式语言(XSL:eXtensible Stylesheet Language)和可扩展链接语言(XLink:eXtensible Link Language)。DTD和XML大纲规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素与元素属性之间的关系; Namespace(名域)实现了统一的XML文档数据表示以及数据的相互集成;XSL是用于规定XML文档呈现样式的语言,它使得数据与其表现形式相互 独立,比如XSL能使Web浏览器改变文档的表示法,如数据显示顺序的变化,不需要再与服务器进行通讯。通过改变样式表,同一个文档可以显示得更大,或者 经过折叠只显示外面的一层,或者可以变为打印的格式。而XLink 将进一步扩展目前Web上已有的简单链接。

  二、文档对象模型(DOM)

  DOM是Document Object Model(文档对象模型)的简称,是对Web文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。

  DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:

  ・ 描述文档表示和操作的接口;

  ・ 接口的行为和属性;

  ・ 接口之间的关系以及互操作。

  DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不 是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对 象,不管是根节点还是实体的属性。

  在DOM中主要有以下三个对象:

  ・ XML文档对象 XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。

  ・ XML节点对象 XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。

  ・ XML节点列表 XML文档模块列表代表了节点的集合。

  利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。

  三、MSXML

  从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是剧本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。

  MSXML.DLL所包括的主要COM接口有:

  1. DOMDocument

  DOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文 档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。

  2. IXMLDOMNode

  IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。

  3. IXMLDOMNodeList

  IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过”for…next”结构来遍历所有的节点。

  4. IXMLDOMParseError

  IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。

  在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找 到的第一个节点)方法进行查询,用createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的 setAttribute和getAttribute方法来设置和获得节点的属性。

欢迎大家阅读《VC++中利用MSXML解析XML文档_xml》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了在使用MSXML解析XML文件时出现DTD禁用问题的解决方案。通过代码示例和错误信息获取方法,解释了默认情况下DTD是禁用的,以及如何启用DTD的方法。此外,还提到了网上关于该问题的信息相对较少,因此本文提供了解决方案以供参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
牵绊2502897683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有