**微软XML核心服务**（**MSXML**）提供了一组服务，使用户可以使用JScript、VBScript和其它微软的开发工具开发基于XML的本机应用程序。它支持XML 1.0、DOM、SAX、XSLT 1.0，并提供了包括XSD和XDR在内的XML schema、XMLHttpRequest、XPath、SOM（）等技术。

版本历史
----

**MSXML**是不同产品的合集。可从此处枚举各个版本：

### 现行有效版本

* **MSXML 6.0** MSXML6是最新版本。与MSXML3一起随Microsoft SQL Server 2005、Visual Studio 2005、.NET Framework 3.0、Windows Vista、Windows XP Service Pack 3发行。支持64位本地环境。版本6可以替代版本4，但不能替代版本3。MSXML 6不支持Windows 9x。
* **MSXML 3.0**对应于msxml3.dll。MSXML 3.0 SP2随Windows XP、Internet Explorer 6.0与MDAC 2.7发行。Windows XP SP2包含MSXML 3.0 SP5，作为MDAC 2.81的一部分。Internet Explorer 版本6.0、7.0、8.0使用MSXML 3解析XML文档。MSXML 3.0 SP7是Windows 95支持的最高版本。Windows XP SP3包含MSXML 3.0 SP9。Windows Vista包含MSXML 3.0 SP10。

### 过时版本

* **MSXML 5.0**随Microsoft Office 2003与Office 2007发布。Microsoft没有发布5.0的文档，因为MSXML 5仅为Office 2003与2007内部使用。Office 2010不包含MSXML 5.0。
* **MSXML 4.0**随独立的、可下载的SDK发布，不能完全兼容版本3.0 。只有32位版本。MSXML 4.0 SP3是最高版本。并于2014年4月过期。
* **MSXML 2.6**随Microsoft SQL Server 2000与MDAC 2.6发布，对应于msxml2.dll，最后版本为 KB887606 （页面存档备份，存于）.
* **MSXML 2.5**随Windows 2000中的Internet Explorer 5.01 与MDAC 2.5发布。对应于msxml.dll
* **MSXML 2.0a**随Internet Explorer 5.0发布
* **MSXML 1.0**随Internet Explorer 4.0发布

DOM
---

MSXML以COM接口（Interface）的形式提供了一套XML的分析器（parser），从而实现了DOM。

常用的接口：

### IXMLDOMDocument

IXMLDOMDocument是XML文档接口，是DOM树结构的根结点。

```
//声明并创建一个IXMLDOMDocument的智能指针：
MSXML2::IXMLDOMDocumentPtr pXmlDoc;
HRESULT hr = pXmlDoc.CreateInstance( \_\_uuidof(MSXML2::DOMDocument60), NULL, CLSCTX\_INPROC\_SERVER);
if( FAILED(hr))
 printf("Failed to create DOM document interface pointer.\n");

//加载xml文件代码为： 
try
{
 pXmlDoc->async = VARIANT\_FALSE; // 使用阻塞式同步加载xml文件。默认是异步方式加载，还需要检查IXMLDOMDocument的ReadyState，这特别适用于从网络上加载。 
 pXmlDoc->validateOnParse = VARIANT\_FALSE;//加载xml文件时，是否依据xml文件中指明的DTD或schema检查xml文件的结构
 pXmlDoc->resolveExternals = VARIANT\_FALSE;//分析xml时，外部定义或ocument type definition(DTD)等不被处理
 if( pXmlDoc->load("test.xml") != VARIANT\_TRUE)
 {
 printf("Fail reason: %s\n", (LPCSTR)pXmlDoc->parseError->Getreason());
 }
 else
 {
 // success
 }
}
catch(\_com\_error errorObject)
{
 printf("Exception, HRESULT = 0x%08x", errorObject.Error());
} 

//保存xml文件：
try
{ 
 if( FAILED( pXmlDoc->save(L"myData.xml")))
 {
 printf("Fail reason: %s\n", (LPCSTR)pXmlDoc->parseError->Getreason());
 }
 else
 { 
 // success
 }
}
catch(\_com\_error errorObject)
{
 printf("Exception, HRESULT = 0x%08x", errorObject.Error());
}

```

### IXMLDOMNode

IXMLDOMNode是通用的节点接口，各种类型节点接口都从它派生，包括IXMLDOMDocument。节点类型包括：

| 节点类型 | 示例 |
| --- | --- |
| NODE\_ELEMENT | <**artist** type="band">The Offspring<**/artist**> |
| NODE\_ATTRIBUTE | **type="band"**>The Offspring |
| NODE\_TEXT | **The Offspring** |
| NODE\_CDATA\_SECTION | 示例 |
| NODE\_ENTITY\_REFERENCE | 示例 |
| NODE\_ENTITY | 示例 |
| NODE\_PROCESSING\_INSTRUCTION | <**?xml version="1.0"?**> |
| NODE\_COMMENT | 示例 |
| NODE\_DOCUMENT | 示例 |
| NODE\_DOCUMENT\_TYPE | <**!DOCTYPE compactdiscs SYSTEM "cds.dtd"**> |
| NODE\_DOCUMENT\_FRAGMENT | 示例 |
| NODE\_NOTATION | 示例 |

获取根节点的一种方法：

```
MSXML2::IXMLDOMNodePtr pRootNode, pTempNode;
pXmlDoc->get\_firstChild(&pRootNode);
while( pRootNode)
{
 MSXML2::DOMNodeType type;
 pRootNode->get\_nodeType(&type);
 if(type==NODE\_ELEMENT) // 如果是element节点，而不是注释、回车符等
 break; //找到了根节点
 pTempNode = pRootNode;
 pTempNode->get\_nextSibling(&pRootNode);
}

```

### IXMLDOMNodeList

IXMLDOMNodeList是节点列表的接口，表示一组兄弟（sibling）节点的列表。可以通过index从0开始遍历列表。列表中的元素还是动态的，会随着XML文档的改变而更新。

### IXMLDOMNamedNodeMap

IXMLDOMNamedNodeMap是命名节点的无序集合的接口。该接口常用于表示节点的属性集，并且是动态的。

### IXMLDOMElement

IXMLDOMElement是元素的接口，一般用来表示一个节点及其属性。

```
//获取文档根节点的方法一：
MSXML2::IXMLDOMElementPtr pRootNode = pXmlDoc->documentElement;
//获取文档根节点的方法二：
MSXML2::IXMLDOMElementPtr pRootNode2;
pXmlDoc->get\_documentElement(&pRootNode2);

```

### IXMLDOMAttribute

IXMLDOMAttribute是节点属性的接口。

### IXMLDOMText

IXMLDOMText是节点的文本的接口。

### IXMLDOMComment

IXMLDOMComment是XML文档的注释的接口。

### IXMLDOMParseError

IXMLDOMParseError是XML分析时语法出错的接口，包括了错误的详细信息。

### IXMLDOMImplementation

### IXMLDOMCharacterData

IXMLDOMCharacterData是字符数据的接口。也是一批基于字符的接口的基类。

### IXMLDOMCDATASection

IXMLDOMCDATASection是CDATA类型的文本的接口。

### IXMLDOMDocumentFragment

### IXMLDOMDocumentType

### IXMLDOMProcessingInstruction

### IXMLDOMNotation

### IXMLDOMEntity

### IXMLDOMEntityRefernce

### 各种智能指针

DOM的各种接口一般都有相应的智能指针接口，通常为接口名加上Ptr。例如IXMLDOMDocument的智能指针接口为IXMLDOMDocumentPtr。

C++语言使用
-------

需要在源程序中加入这行：

```
#import <msxml6.dll> raw\_interfaces\_only

```

这使得在工程（Project）的编译文件夹下生成msxml6.tlh和msxml6.tli两个文件，分别相当于COM接口的头文件与实现文件。"raw\_interfaces\_only"属性使得生成的msxml6.tlh中，各个结构中只包含返回类型为HRESULT的接口函数，并且接口函数名省去了raw\_前缀；如果不用该属性，则默认是在各个结构中声明了一套带raw\_前缀的返回HRESULT类型的接口函数以及不带raw\_前缀的返回各种VARIANT\_类型的wrapper接口函数。

也可以通过连接输入库文件msxml6.lib来使用。

作为COM库，在线程的开头与结束之处需要分别调用COM环境的初始化与去初始化函数：CoInitialize、CoUninitialize。

MSXML的各种资源都放在了MSXML2名字空间（namespace）中。

Visual Basic使用
--------------

首先在Visual Basic的Project上打开Add Reference对话框，在COM标签页（tab）中，增加"Microsoft, v6.0"的引用。也可以选择4.0或5.0版本的引用。

然后，在源代码中输入：

```
Dim xDoc As MSXML.DOMDocument 
Set xDoc = New MSXML.DOMDocument

'If xDoc.Load("http://www.develop.com/hp/brianr/cds.xml") Then
If xDoc.Load("C:\My Documents\cds.xml") Then
 ' The document loaded successfully.
 ' Now do something intersting.
Else
 ' The document failed to load.
 Dim strErrText As String
 Dim xPE As MSXML.IXMLDOMParseError
 ' Obtain the ParseError object
 Set xPE = xDoc.parseError
 With xPE
 strErrText = "Your XML Document failed to load" & \_
 "due the following error." & vbCrLf & \_
 "Error #: "& .errorCode & ": "& .reason & \_
 "Line #: "& .Line & vbCrLf & \_
 "Line Position: "& .linepos & vbCrLf & \_
 "Position In File: "& .filepos & vbCrLf & \_
 "Source Text: "& .srcText & vbCrLf & \_
 "Document URL: "& .url
 End With

 MsgBox strErrText, vbExclamation

End If

Set xDoc = Nothing

```

VBScript使用
----------

```
Set objParser = CreateObject( "Microsoft.XMLDOM" )
```

参考文献
----

* MSDN:Microsoft XML Team Blog （页面存档备份，存于）

1. ↑  MSXML Version List （页面存档备份，存于） at Microsoft.
2. ↑ .  [2018-01-13]. （原始内容存档于2018-01-13）.
3. ↑ .  [2018-01-13]. （原始内容存档于2017-08-26）.
4. ↑  , Microsoft, 2009-09-29  [2011-01-21], （原始内容存档于2020-08-06）
5. ↑  , Microsoft, 2013-03-15  [2015-07-11], （原始内容存档于2018-01-13）
6. ↑ .  [2015-12-02]. （原始内容存档于2015-12-09）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
微軟應用開發介面與框架 |
| --- |
|  |
| 圖形介面 | 
* 
* DirectX
* Direct2D
* Direct3D
* D3DX
* GDI / GDI+
* WPF
* Silverlight
* WinRT XAML（英语：）
* Windows色彩系统
* Windows Image Acquisition（英语：）
* Windows Imaging Component（英语：）
* DXGI
* Windows高级光栅化平台（WARP）
* WinG标准

 |
|  |
| 音樂與音效 | 
* DirectMusic
* DirectSound
* DirectX（英语：）
* 跨平台音频创作工具（XACT）
* Speech API（英语：）
* XAudio2（英语：）

 |
|  |
| 多媒體 | 
* DirectX
	+ Media Objects
	+ DXVA
* Xinput
* DirectInput
* DirectShow
* Image Mastering API
* Managed DirectX（英语：）
* Media Foundation
* XNA
* Windows Media
* Video for Windows

 |
|  |
| Web | 
* MSHTML
* RSS平台（英语：）
* JScript
* VBScript
* 瀏覽器協助工具物件
* XMLHTTP
* SideBar小工具
* TypeScript

 |
|  |
| 資料存取 | 
* 資料存取元件集
	+ ADO
	+ ADO.NET
		- Entity Framework
	+ ODBC
	+ OLE DB
* 可扩展存储引擎
* WCF Data Services
* 同步框架（英语：）
* Jet資料庫引擎
* 微軟XML剖析器
* OPC

 |
|  |
| 網路 | 
* Winsock
	+ LSP
* Winsock内核（英语：）
* Windows筛选平台
* 網路驅動程式介面規格（NDIS）
* Windows Rally
* 后台智能传输服务（BITS）
* 對等通訊API（英语：）
* MSMQ（英语：）
* MS MPI（英语：）
* DirectPlay
* Active Directory Service Interface

 |
|  |
| 通訊 | 
* 訊息API（英语：）
* 電話API
* WCF

 |
|  |
| 管理 | 
* Win32控制台
* Windows Script Host
* WMI
* PowerShell
* 工作排程器
* Offline Files（英语：）
* 磁碟區陰影複製服務
* Windows Installer
* Windows錯誤回報（英语：）
* 事件記錄器
* 通用日志文件系统

 |
|  |
| 元件與模型 | 
* COM
* COM+
* ActiveX
* DCOM
* .NET框架

 |
|  |
| 函式庫 | 
* 框架类库
* MFC
* 活动模板库（ATL）
* WTL

 |
|  |
| 驱动程序 | 
* WDM
* WDF
	+ KMDF
	+ UMDF
* WDDM
* NDIS
* UAA
* BDA（英语：）
* VxD

 |
|  |
| 安全性 | 
* Crypto API
	+ CAPICOM
* Windows CardSpace
* 数据保护API
* 安全支持提供者接口（SSPI）

 |
|  |
| .NET | 
* ASP.NET
* ASP.NET AJAX
* ADO.NET
* Remoting
* Silverlight
* 任务并行库（英语：）（TPL）
* WCF
* Windows CardSpace
* WPF
* WF
* Core家族
	+ .NET Core
	+ ASP.NET Core
	+ Entity Framework Core
	+ ASP.NET Core MVC

 |
|  |
| 工廠 | 
* EFx Factory（英语：）
* Enterprise Library（英语：）
* 複合使用者介面（英语：）
* CCF（英语：）
* CSF（英语：）

 |
|  |
| 行程間通訊 | 
* MSRPC（英语：）
* 動態資料交換（DDE）
* Remoting
* WCF

 |
|  |
| 可協助性 | 
* Active Accessibility（英语：）
* 使用者介面自動化（英语：）

 |
|  |
| 文字與多語系支援 | 
* DirectWrite
* 文本服务框架（英语：）
* 文本对象模型（英语：）
* 输入法编辑器
* 語言介面套件（英语：）
* 多語系使用者介面（英语：）
* Uniscribe

 |
|  |
| 遊戲開發 | 
* Direct3D
* D3DX
* DirectSound
* DirectInput
* DirectPlay
* DirectMusic
* Managed DirectX（英语：）
* XNA

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
 Internet Explorer |
| --- |
|  |
| 版本（英语：） | 

|  |  |
| --- | --- |
| 主要版本 | 
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11

 |
|  |
| 其它版本 | 
* Mobile
* Mac
* UNIX
* Xbox
* IEs4Linux

 |

 |
|  |
| 概覽 | 
* 歷史
* IE盒模型缺陷
* 瀏覽器幫助對象（BHO）
* 彩蛋
* 擴展
	+ 扩展列表（英语：）
* 移除
* Shell

 |
|  |
| 技術 | 
* 加速器
* ActiveX
* DHTML
	+ HTA
	+ HTCS（英语：）
* favicon.ico
* HTML+TIME（英语：）
* Index.dat
* JScript
* MHTML
* MSXML
* RSS平台（英语：）
* 智慧標籤
* 临时Internet文件（英语：）
* 矢量标记语言
* 网页快讯
* WPAD
* XHR/XDomainRequest

 |
|  |
| 軟件與引擎 | 
* Administration Kit
* 开发人员工具
* 集成Windows身份验证（英语：）
* Tasman
* Trident
	+ Chakra

 |
|  |
| 實現 | 
* Active Channel（英语：）
* 活动桌面
* ActiveMovie
* 频道定义格式（英语：）（.cdf）
* Comic Chat/Chat 2.0（英语：）
* DirectX Media（英语：）
* Internet邮件和新闻
* Microsoft Java虛擬機器（MSJVM）
* MSN Explorer（英语：）
* MSN for Mac OS X（英语：）
* NetMeeting（英语：）
* NetShow（英语：）
* Outlook Express
* 服务器网关加密（英语：）（SGC）
* Spyglass
* Windows通讯录（英语：）
* Windows桌面更新

 |
|  |
| 人物 | 
* 坦塔克·塞里克
* 托馬斯·里爾登
* 迪安·哈查莫維奇
* 斯科特·艾薩克斯（英语：）
* 蓝泽祈

 |
|  |
| 事件 | 
* 浏览器大战
* 合众国诉微软案
* Download.ject（英语：）
* Eolas与微软（英语：）
* Sun与微软

 |
|  |
| 相關 | 
* 對Internet Explorer的批評
* IE Only
* Edge

 |
|  |
| 
* 分类 分類
* 共享资源页面 共享資源
* 微软主题
* 互联网主题

 |

 |