範例: SAX Win32 AppWizard 建立 Visual C++ SAX 應用程式

文章翻譯 文章翻譯
文章編號: 276505 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

代替使用文件物件模型 (DOM),您可以使用簡單的 API 的 XML (SAX) 提供一個較低層級的 API 來剖析 XML 資料造成多大效能獲得在某些情況下。比方說傳訊案例其中前置處理,而重設到其他伺服器的 XML 文件的路徑。

SAX 原先已定義為一組的 Java API。Microsoft XML 剖析器版本 3.0 MSXML 將 Java 介面對應至 COM 介面,然後在 [七月 2000 Web 發行,或在我們的剖析器版本 SAX 支援提供的 Microsoft Visual C++ 和 Visual Basic 的程式設計。如相關的軟體開發套件 (SDK) 文件請參閱下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
http://msdn.microsoft.com/xml
搭配效能 SAX 在程式設計的利益可以需要一些額外的工作,從開發人員。為了 SAX Visual C++ 的程式設計這份文件會包含 [SAX] Win32 AppWizard 除了已使用這個精靈來建立的範例程式。

附註如同其他範例程式碼的 [Win32 應用程式] [SAX Win32 將會提供做幫助開發人員 ; 不過,沒有這項工具不支援計劃。

其他相關資訊

下列檔案是可以從 Microsoft 下載中心 」 下載:
SAXAppWizard.exe
SAXAppWizard.exe 檔案包含下列檔案:

摺疊此表格展開此表格
檔案名稱大小
SAXAppWizard.awx116 KB
a1.dsw1 KB
a1.dsp2 KB
a1.cpp5 KB
a1ContentHandler.h2 KB
a1ContentHandler.cpp3 KB
SAXContentHandlerImpl.h3 KB
SAXContentHandlerImpl.cpp4 KB
StdAfx.h2 KB
StdAfx.cpp1 KB
Stock.xml1 KB

SAX 介面實作的 「 AppWizard 的方式

不同的方法都可以用來實作 COM 介面。 [AppWizard 使用下列的陳述式來產生每個 SAX 介面的抽象類別定義:
#import "msxml3.dll?" raw_interfaces_only
				
附註 雖然這是正確的方法產生實作 COM 介面的所有包裝函式類別,有時候是令人滿意與 SAX,使用 DOM 介面,補漏白為 C + + 例外狀況的所有 COM 錯誤,並取得 _variant_t 及 _bstr_t 的所有優點。在這種情況下您可以使用下列組合來替代:
#import <msxml3.dll> exclude("IErrorInfo") high_method_prefix("_") raw_method_prefix("")
				
因為您可能只感興趣處理由介面定義特定事件,並不需要在介面中實作所有方法。不過,SAX 介面 (例如 ISAXContentHandler) 中定義的所有函數都都純虛擬函式。如果要解決這個問題,[AppWizard 產生中間的包裝函式類別 (比方說 SAXContentHandlerImpl) 來擴充 SAX 介面,並自動換行的所有函數。

此外,三個基本方法的 COM 介面在這個類別中實作 (QueryInterfaceAddRef發行)。決定您要處理,哪些事件從這個包裝函式類別的衍生的類別會產生根據您的選取 ; 這就是樣板類別,您必須修改完成實作之後 (比方說 「 類別 A1ContentHandler: 公用 SAXContentHandlerImpl")。

如何使用 SAX Win32 AppWizard

您將使用 [AppWizard 來建立列印至主控台視窗的 XML 內容的 Visual C++ SAX 應用程式。[AppWizard 會自動建立 Stock.xml 檔,您將會為您的範例應用程式作為輸入的 XML 資料您專案] 資料夾中。

若要建立範例應用程式,請依照下列步驟執行:
  1. 將 SAXAppWizard.awx 檔案複製到 MSDev 範本資料夾中。預設情況下,這是位於 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template。
  2. 啟動 Visual C++ 和建立新的專案。您可以看到 SAX Win32 AppWizard 之間的選項。選取它,並輸入 (例如"a1"),專案的名稱然後按一下 [下一步]。
  3. 在第二個對話方塊您決定哪一個處理常式和您必須要有實作的方法。為了簡單起見,只實作內容處理常式來處理這個範例中的三個事件: startElement字元endElement。連按兩下 (或使用 < < 或 > >) 以選取或移除項目。按一下[完成] 以產生專案。
  4. 專案會產生之後按一下 [類別] 檢視,而且您看到兩個類別會實作內容處理常式產生。其中一項是 SAXContentHandlerImplIXMLSAXContentHandler 介面的包裝函式類別。這個類別可控制物件的生命週期中實作 COM 介面 (QueryInterfaceAddRef發行) 的三種基本方法。
  5. 您也會看到,名為 a1ContentHandler、 使用三種方法 (startElement字元endElement) 處理您想要的事件產生該另一個類別。也會產生兩個額外的方法: prt 是用於印刷的 Helper 方法,CreateInstance 用來建立 a1ContentHandler 的執行個體。
  6. 在 [類別] 檢視下 Global,請按一下 main 函式,,然後再檢查 [SAX 應用程式中的步驟:
    1. 建立讀取器。
    2. 建立 a1ContentHandler 的執行個體。
    3. 呼叫 putContentHandler 方法來使用 XML 讀取器登錄。
    4. parseURL 以 XML 和開始剖析的路徑。
若要完成內容處理常式實作,請依照下列步驟執行:
  1. 在 [類別檢視按兩下 startElement 移至這個方法的 [實作] 區段。請檢查輸入的參數: pwchLocalName 是項目的標記名稱而 pAttributes 是目前的項目集合。呼叫以取得屬性,數目 getLength,並用來逐一查看屬性集合,並列印出來。例如:
    prt(L"<%s", pwchLocalName, cchLocalName);
    int lAttr;
    pAttributes->getLength(&lAttr);
    for(int i=0; i<lAttr; i++)
    {
    	wchar_t * ln, * vl; int lnl, vll;
    	pAttributes->getQName(i,&ln,&lnl); 
    	prt(L" %s=", ln, lnl);
    	pAttributes->getValue(i,&vl,&vll);
    	prt(L"\"%s\"", vl, vll);
    }
    printf(">");
    					
  2. 連按兩下 [類別檢視中的 字元,然後再找出程式碼區段。列印每個元素值。例如:
    prt(L"%s", pwchChars, cchChars);
    					
  3. 連按兩下 endElement 類別檢視中,然後再找出程式碼區段。沒有更若要在這個方法執行動作的作用 ; 只列印結束標記。例如:
    prt(L"</%s>",pwchLocalName,cchLocalName);
    					
  4. 編譯並執行應用程式。如果您執行偵錯工具內,放 Stock.xml 做為程式引數 (專案設定) 的輸入。如果一切都正確地實作,您會看到 Stock.xml 內容列印在主控台視窗中。

屬性

文章編號: 276505 - 上次校閱: 2007年10月26日 - 版次: 3.5
這篇文章中的資訊適用於:
  • Microsoft XML Parser 3.0
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
關鍵字:?
kbmt kbproductlink kbdownload kbdownload kbfile kbhowto kbmsxmlnosweep KB276505 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:276505
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com