MSXML

微軟XML核心服務等技術。版本歷史.MSXML是不同產品的合集。可從此處列舉各個版本：DOM.MSXML以COM介面，從而實現了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檔案程式碼為：trypXmlDoc-&gt;async = VARIANT_FALSE; // 使用阻塞式同步載入xml檔案。預設是非同步方式載入，還需要檢查IXMLDOMDocument的ReadyState，這特別適用於從網路上載入。pXmlDoc-&gt;validateOnParse = VARIANT_FALSE;//載入xml檔案時，是否依據xml檔案中指明的DTD或schema檢查xml檔案的結構pXmlDoc-&gt;resolveExternals = VARIANT_FALSE;//分析xml時，外部定義或ocument type definition(DTD)等不被處理if( pXmlDoc-&gt;load("test.xml") != VARIANT_TRUE)printf("Fail reason: %s\n", (LPCSTR)pXmlDoc-&gt;parseError-&gt;Getreason());else// successcatch(_com_error errorObject)printf("Exception, HRESULT = 0x%08x", errorObject.Error());//儲存xml檔案：tryif( FAILED( pXmlDoc-&gt;save(L"myData.xml")))printf("Fail reason: %s\n", (LPCSTR)pXmlDoc-&gt;parseError-&gt;Getreason());else// successcatch(_com_error errorObject)printf("Exception, HRESULT = 0x%08x", errorObject.Error());IXMLDOMNode.IXMLDOMNode是通用的節點介面，各種型別節點介面都從它派生，包括IXMLDOMDocument。節點型別包括：獲取根節點的一種方法：MSXML2::IXMLDOMNodePtr pRootNode, pTempNode;pXmlDoc-&gt;get_firstChild(&amp;pRootNode);while( pRootNode)MSXML2::DOMNodeType type;pRootNode-&gt;get_nodeType(&amp;type);if(type==NODE_ELEMENT) // 如果是element節點，而不是註釋、回車符等break; //找到了根節點pTempNode = pRootNode;pTempNode-&gt;get_nextSibling(&amp;pRootNode);IXMLDOMNodeList.IXMLDOMNodeList是節點列表的介面，表示一組兄弟節點的列表。可以透過index從0開始遍歷列表。列表中的元素還是動態的，會隨著XML文件的改變而更新。IXMLDOMNamedNodeMap.IXMLDOMNamedNodeMap是命名節點的無序集合的介面。該介面常用於表示節點的屬性集，並且是動態的。IXMLDOMElement.IXMLDOMElement是元素的介面，一般用來表示一個節點及其屬性。//獲取文件根節點的方法一：MSXML2::IXMLDOMElementPtr pRootNode = pXmlDoc-&gt;documentElement;//獲取文件根節點的方法二：MSXML2::IXMLDOMElementPtr pRootNode2;pXmlDoc-&gt;get_documentElement(&amp;pRootNode2);IXMLDOMAttribute.IXMLDOMAttribute是節點屬性的介面。IXMLDOMText.IXMLDOMText是節點的文字的介面。IXMLDOMComment.IXMLDOMComment是XML文件的註釋的介面。IXMLDOMParseError.IXMLDOMParseError是XML分析時語法出錯的介面，包括了錯誤的詳細資訊。IXMLDOMCharacterData.IXMLDOMCharacterData是字元資料的介面。也是一批基於字元的介面的基類。IXMLDOMCDATASection.IXMLDOMCDATASection是CDATA型別的文字的介面。各種智慧指標.DOM的各種介面一般都有相應的智慧指標介面，通常為介面名加上Ptr。例如IXMLDOMDocument的智慧指標介面為IXMLDOMDocumentPtr。C++語言使用.需要在源程式中加入這行：這使得在工程的編譯資料夾下生成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名字空間中。Visual Basic使用.首先在Visual Basic的Project上開啟Add Reference對話方塊，在COM標籤頁中，增加“Microsoft, v6.0”的引用。也可以選擇4.0或5.0版本的引用。然後，在原始碼中輸入：Dim xDoc As MSXML.DOMDocumentSet 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 StringDim xPE As MSXML.IXMLDOMParseError' Obtain the ParseError objectSet xPE = xDoc.parseErrorWith xPEstrErrText = "Your XML Document failed to load" &amp; _"due the following error." &amp; vbCrLf &amp; _"Error #: " &amp; .errorCode &amp; ": " &amp; .reason &amp; _"Line #: " &amp; .Line &amp; vbCrLf &amp; _"Line Position: " &amp; .linepos &amp; vbCrLf &amp; _"Position In File: " &amp; .filepos &amp; vbCrLf &amp; _"Source Text: " &amp; .srcText &amp; vbCrLf &amp; _"Document URL: " &amp; .urlEnd WithMsgBox strErrText, vbExclamationEnd IfSet xDoc = NothingVBScript使用.Set objParser = CreateObject( "Microsoft.XMLDOM" )