MSXML

微軟XML核心服務（MSXML）提供了一組服務，使用戶可以使用JScript、VBScript和其它微軟的開發工具開發基於XML的本機應用程式。它支持XML 1.0、DOM、SAX、XSLT 1.0，並提供了包括XSD和XDR在內的XML schema、XMLHttpRequest、XPath、SOM（）等技術。

版本歷史

MSXML是不同產品的合集。可從此處枚舉各個版本：

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());}

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分析時語法出錯的接口，包括了錯誤的詳細信息。

IXMLDOMCharacterData

IXMLDOMCharacterData是字符數據的接口。也是一批基於字符的接口的基類。

IXMLDOMCDATASection

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

各種智能指針

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") ThenIf 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, vbExclamationEnd IfSet xDoc = Nothing

VBScript使用

Set objParser = CreateObject( "Microsoft.XMLDOM" )