原文:http://blog.sina.com.cn/s/blog_48f93b530100e9tr.html

微软提供了大量的XML开发工具和技术,而SMXML(Microsoft XML Core Services)应该是一般开发中最常用到的技术了。MSXML支持了包括DOM(Document Object Model)、SAX(Simple API for XML)、XMLHttpRequest、XPath、SOM(Schema Object Model)等多种API接口和XML操作工具。本篇先主要介绍应用MSXML所涉及到的概念及说明,下一篇将总结一下应用MSXML DOM SDK进行XML文档处理。

一、MSXML版本说明
       目前共有四种MSXML版本,分别为MSXML3、MSXML4、MSXML5和MSXML6。由于在微软的Windows系统中,MSXML主要是用来支持浏览器和Office的,因此这些版本多与不同浏览器版本及Office版本相关。微软推出IE6时带的是MSXML3,因此一般在XP系统上是支持MSXML3的,MSXML3也成为应用最广泛的一个版本。MSXML5主要用来支持Microsoft Office;而MSXML4很快就被更新版本的MSXML6替代了,微软推荐首选应用最新的MSXML6,其次应用MSXML3。

二、XML(Xtensible Markup Language)简介
       要学习MSXML首先要了解XML。XML是一种被设计用于网络环境或跨平台环境数据存储和交换的标记性语言,达到数据存储分析一致性的目的。XML的结构形式和大家熟悉的HTML类似,但两者的用途没有关联,最大的区别在于XML用来存储数据,并允许使用者定义自己的元素。XML内容灵活的可扩展性以及简单易用的结构设计,使它发展非常迅速,目前已是各种应用环境下的程序之间进行数据传输和交换的最流行技术,另外在信息存储和描述领域,XML也逐渐成为应用标准。
       关于XML的术语大家可以去专门的学习网站了解,这里只简单的说明一下XML的文档结构。先看一个xml文档示例。
    <?xml version='1.0' encoding='GB2312'?>
    <!-- This is a XML example -->
    <root>
      <item type="text">文本</item>
      <item type="cdata">
      <![CDATA[在CDATA中的文本为独立字符串,不被解析,可以包含一些特殊字符]]>
      </item>
      <item type="sub">
        <subitem>子节点</subitem>
      </item>
    </root>
       第1行为XML声明,定义XML使用的版本和编码。如果XML中的编码方式不是UTF-8或UTF-16,则必须声明编码方式,否则有可能解析失败。关于XML编码的问题下面会详细介绍。
       第2行是注释,形式跟HTML是一样的。
       第3行的root为根元素(文档元素),其他所有元素都包含在该元素的开始和结束标签之间。XML文件必须要有一个根元素,其他元素都出现在根元素内部。
       第4行到第10行为根元素的子节点元素,这些元素是可以重名的。一个元素可以拥有属性、文本和子元素。如第4行的item元素拥有“type”属性,item标签之间的“文本”就是该元素的文本,第8行的item则拥有子元素“subitem”。
       第6行的<![CDATA[ ]]>段是一个特殊的语法,被称为CData段。表示其中的字符无需解析,例如一些类似'<'、'/'、'>'的特殊字符,这样可以防止XML的结构被破坏。
       另外需要注意的一些事项:
       1、XML的标签是大小写敏感的;
       2、一些转义字符在表达非转义的情形下,应使用实体引用,如将'<'变为'&lt',将'>'变为'&gt',将'&'变为'&amp',将'''变为'&apos',将'"'变为'&quot';
       3、XML中应尽量少使用属性,而多使用子元素。
   
       三、XML中的编码
       计算机上的字符集问题是一个让所有开发者头疼的问题,由于历史原因以及具体应用的不同需求,产生了很多种字符编码集,常见的大概可以分为两种:单字节编码和多字节编码,前者代表为ASCII,后者代表为Unicode。但是除了这两者之外,还有很多字符集,而且单Unicode就提供了3种编码方法:UTF-8,UTF-16和UTF-32。关于字符集的具体知识,大家可以自己去查阅一些资料。
       XML对字符编码的规定是:如果XML指定编码格式,则按照指定格式进行处理,当然此时必须保证文档存储的字符编码格式与指定的统一,或者解析器能够处理这种编码格式,如果出现错误,解析器会给出提示信息。当XML没有指定编码格式时,采用默认编码格式UTF-8,如果此时文档编码格式不是UTF-8,那么解析就会出错。

四、DOM(Document Object Model)
       DOM是MSXML的一种对XML文档进行处理的标准模型,将XML文档全部加载到内存中形成一个树结构,在此基础上将XML当作一个对象进行操作。DOM提供了一系列的API并为XML结构中的各种类型元素定义了对应的对象接口。利用这些接口,可以对XML文档进行创建、遍历,对文档内容进行添加、删除、修改等动态操作。
       关于DOM的应用将在下一篇中详细说明。
   
       五、SAX(Simple API for XML)
       看名字可以知道SAX是对XML操作的一个API集合,为什么这个集合"Simple"呢?其实是相对于DOM来说的。
       上面已经介绍,DOM模型每次都会将整个XML文档装载到内存当中维护一个树结构,可想而知,当XML文档比较复杂或者体积比较大的时候,维护起来肯定会影响到效率。因此,当开发者比较重视效率时,应用SAX可能是一个好的选择。
       SAX最大的特点就是事件驱动。装载XML文件时,SAX遍历文档并产生诸如开始和结束解析元素之类的事件,通知外部应用进行处理。所有的处理都在一次遍历中完成,因此SAX处理XML文档效率很高。另外针对大型的文档,SAX可以每次只将一部分装入内存,这样无论在空间效率和时间效率上都能得到有效提高。
       当然SAX的应用范围是会受到一些限制,而且外部的处理也非常琐碎,总之与DOM应该是很好的互补。
   
       六、XPath
       Xpath是一种能够在XML文档中寻找信息的语言,它通过XML文档中的元素和属性来进行导航,形式非常类似我们平时用的路径表达式。
       XPath内置了很多函数可以帮助实现导航功能,通过指定路径表达式来选择XML文档中的节点或节点集合。在XPath中有七种节点:元素、属性、文字、命名空间、处理说明、注释和根节点。具体的路径表达式规则大家可以参考相关资料。

七、MSXML API版本

这一节是最新加进来的,因为上面第一节说了一下MSXML的版本,但是还有一个MSXML API的版本,这两者比较容易混淆,在此说明一下。第一节说的是MSXML dll库文件的版本,而API的版本是另一套规则。历史版本有:MSXML1.0、MSXML1.0 SP1/SP2、MSXML2.0、MSXML2.6、MSXML3.0、MSXML4.0、MSXML5.0 for Microsoft Office Applications,这些版本中较早的MSXML1.0和MSXML1.0 SP1/SP2现在都已不再支持,MSXML2.0是处理XML文档最常用的版本,后面的版本都是添加了一些新的功能接口。

基本的概念就这些了,希望对大家了解MSXML有所帮助。

【转载】MSXML应用总结 概念篇的更多相关文章

  1. 【转载】MSXML应用总结 开发篇(上)

    原文:http://blog.sina.com.cn/s/blog_48f93b530100ejv9.html 本篇是接前文“MSXML应用总结 概念篇”写的,主要总结一下MSXML DOM接口的应用 ...

  2. 【转】android 电容屏(二):驱动调试之基本概念篇

    关键词:android  电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...

  3. 常见面试题整理--Python概念篇

    希望此文可以长期更新并作为一篇Python的面试宝典.每一道题目都附有详细解答,以及更加详细的回答链接.此篇是概念篇,下一篇会更新面试题代码篇. (一).这两个参数是什么意思:*args,**kwar ...

  4. 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 百篇博客分析OpenHarmony源码 | v62.01

    百篇博客系列篇.本篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 51.c.h.o 本篇开始说文件系统,它是内核五大模块之一,甚至有Linux的设计哲学是" ...

  5. 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作 | 百篇博客分析OpenHarmony源码 | v43.02

    百篇博客系列篇.本篇为: v43.xx 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里 ...

  6. 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 百篇博客分析OpenHarmony源码 | v24.01

    百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内 ...

  7. 鸿蒙内核源码分析(线程概念篇) | 是谁在不停的折腾CPU? | 百篇博客分析OpenHarmony源码 | v21.06

    百篇博客系列篇.本篇为: v21.xx 鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调 ...

  8. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  9. DNA拷贝数变异CNV检测——基础概念篇

    DNA拷贝数变异CNV检测——基础概念篇   一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...

随机推荐

  1. [WinCE] [Win10] Win10 Creator 升级后 Windows Mobile Device Center 不能打开

    运行 services.msc 找到 Windows Mobile 2003-based device connectivity服务,右键属性,Log On选项卡选择 Local System acc ...

  2. android 常用adb 及linux 命令

    一.ADB相关 adb shell:进入连接的USB调试模式设备shell命令行下 adb tcpip 5555:将USB连接的调试及的连接方式改为网络远程模式进行调试 这里端口为5555(adb 默 ...

  3. PHP-7的FPM服务的启动

    1.PHP 7的FPM服务位置:/ect/init.d/php7.0-fpm 2.启动:sudo service php7.0-fpm reload

  4. [2018HN省队集训D5T2] party

    [2018HN省队集训D5T2] party 题意 给定一棵 \(n\) 个点以 \(1\) 为根的有根树, 每个点有一个 \([1,m]\) 的权值. 有 \(q\) 个查询, 每次给定一个大小为 ...

  5. SC review 5.2 设计可复用软件

    行为子类型与Liskov替换原则 Java 中编译器执行的规则(静态类型检查): • 子类型可以增加方法,但不可删 • 子类型需要实现抽象类型中的所有未实现方法 • 子类型中重写的方法必须有相同或子类 ...

  6. 【linux】安装和配置 mysql服务器

    按照官网教程,根据自己的系统安装不同的发行版 https://dev.mysql.com/doc/refman/5.6/en/linux-installation-yum-repo.html 配置: ...

  7. 洛谷 P2045 方格取数加强版【费用流】

        题目链接:https://www.luogu.org/problemnew/show/P2045 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现 ...

  8. python第二十四课——set中的函数

    集合中常用的一些函数: 1.add(obj):追加一个obj元素到集合中 pop():从集合中随机弹出一个元素 remove(obj):删除集合中和obj匹配的元素 clear():清空集合 s1={ ...

  9. python第二十三课——dict中的函数

    dic1 = {...} dic2 = {...} dic1.update(dic2) 1.update(dict):dic1调用update传入dic2,如果dic2中的内容在dic1中不存在,那么 ...

  10. 函数式编程的类型系统:typeclass--Functor的解释--构造类型

    函数式编程的类型系统:typeclass Typeclass是带有关联构造类型的抽象接口,抽象接口的行为用于约束构造类型. 构造类型实现了抽象接口的行为约束,就称这个实现为这个构造类型的函子. 要素: ...