六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

使用微軟的XML Parser創建XML文檔

[摘要]XML提供了不同或不相似的系統之間表達或交流信息的功能強大和靈活的方式。XML也是基于文本格式的,它在許多方面與HTML相似。例如,XML文檔中也包含有開始(例如<font>)、結束(例如</font>)標志。與HTML不同的是,我們可以在XML中使用任何喜歡的標志━━使用...
XML提供了不同或不相似的系統之間表達或交流信息的功能強大和靈活的方式。XML也是基于文本格式的,它在許多方面與HTML相似。例如,XML文檔中也包含有開始(例如<font>)、結束(例如</font>)標志。與HTML不同的是,我們可以在XML中使用任何喜歡的標志━━使用多少標志或如何給它們命名都由我們自己來定。

MXXMLWriter組件基礎知識
創建XML文檔的最大困難在于,XML文檔應該符合一些基本的格式規則━━例如確保其中的元素不會重迭。盡管我們可以很容易地保證新的XML文檔符合XML規格所定義的基本格式,但使用第三方的組件來管理它的輸出會更加簡單和安全。在本篇文章中我們將介紹的是MXXMLWriter,它是微軟的MS XML Parser 3.0的一部分。
說起解析器,我們一般會想到在其輸入端需要輸入一些數據,然后在其輸出端得到一系列的符號。微軟的XML Parser與規則解析器的作用非常相似,它在輸入端接受一個XML文檔,然后在輸出端生成一個XML文檔對象模型(DOM)━━XML文檔的一種基于對象的表達方式,或者生成一系列的Simple API for XML(SAX)事件。無論生成哪種輸出格式,其輸入都是XML文檔。
MXXMLWriter是微軟XML parser的一部分,對于通過編程方式創建XML文檔非常有用。使用MXXMLWriter比自己動手創建XML文檔有許多好處,其中包括:
·MXXMLWriter產生的XML文檔符合W3C XML 1.0 Namespace推薦標準,我們無需關心輸出格式,因為解析器能夠為我們解決這一切。
·我們可以將MXXMLWriter的輸出與SAX Content Handler綁定在一塊兒,以較少的內存快速進行處理。
·基于界面的編程模式使我們的代碼更容易閱讀和維護,我們可以將輸出發送給一個支持IStream界面的String或COM對象。

處理XML文檔的基礎知識
在能夠使用MXXMLWriter組件創建新的XML文檔之前,我們需要了解一些處理XML文檔的基本知識,因為MXXMLWriter希望使用它的應用程序能夠成為SAX事件提供者。
處理XML文檔有二種方式:使用文檔對象模型(DOM)或者Simple API for XML(SAX)。二種方法在各種應用中各有優、缺點,DOM在XML文檔查詢方面有優勢,SAX在快速處理超大型XML文檔方面有優勢,而且能夠使我們完全控制解析的過程。

使用DOM處理XML文檔
當將XML文檔加載至DOM中時,XML解析器會讀取整個文檔,在內存中創建許多表達這一文檔的對象。下面的圖1顯示了一個簡單的XML文檔片段和DOM如何在內存中表示它:

圖1顯示,Document類的實例表示一個XML文檔(圖1中的第一部分),XML文檔中包含有節點(圖1中的第二部分),這些節點是DOM Node對象的實例。(圖1中的第三部分)。
一旦DOM已經將全部XML文檔讀入內存,DOM就為你處理XML文檔作好所有的準備了。我們可以通過使用循環重復處理其中的內容、使用XPath表達式查詢特定的節點或隨機訪問DOM樹的任意部分對DOM中的元素進行操作。關健是我們的應用程序能夠對XML文檔進行完整的控制,可以從文檔在內存中的表示中提取所需要的信息。

使用SAX處理XML文檔
SAX編程模式與DOM編程模式完全不同。通過讓應用程序截獲XML解析器在處理XML文檔時產生的事件,SAX可以使應用程序更接近XML解析器。由于事件是被推送到應用程序中的,因此,它提供的是一種“推”編程模式,應用程序無需象在使用DOM時那樣作為一個控制點。

,XML Reader(圖2中的第一部分)負責讀取XML文檔。XML Reader請求了我們提供的一個組件,它在讀取XML文檔時調用了其界面中的方法。(圖2中的第二部分)我們的應用程序(圖2中的第三部分)則使用組件的輸出。
在圖2中,一個包含有ISAXXMLReader的組件被用作XML Reader。要使用SAX處理XML文檔,需要在ISAXContentHandler界面中注冊一個組件。當XML Reader遇到文檔中的元素時,它調用ISAXContentHandler方法處理startDocument、startElement等元素和提供有關XML Reader讀取的元素信息的字符。圖3顯示了一個事件的序列,該事件序列是XML Reader在處理樣例文件(圖1、2中出現的)時生成的。


使用MXXMLWriter創建XML文檔
MXXMLWriter是SAX的消費者,意味著使用MXXMLWriter的應用程序是SAX的提供者,MXXMLWriter使用SAX事件編寫出正確格式的XML文檔。
本篇文章中的例子代碼是一個能夠讀取以“,”分割的文件并產生XML文檔的控制臺應用程序,它產生的XML文檔顯示在屏幕上,我們可以將其輸出捕捉到文本文件中,并保存在磁盤上。例子代碼使用STL(標準模板庫)對文件的讀取進行管理。下面的表1顯示了MXXMLWriter的具體代碼,它能夠建立指向ISAXContentHandler等界面的指針:
Listing 1 - Instanciating MXXMLWriter// MSXML2::IMXWriterPtr是一個智能化指針
MSXML2::IMXWriterPtr pXMLWriter;
pXMLWriter.CreateInstance(__uuidof(MSXML2::MXXMLWriter));
// ISAXContentHandler是一個由MXXMLWriter使用的界面
MSXML2::ISAXContentHandlerPtr pContentHandler;
pContentHandler=pXMLWriter; //calls QI for ISAXContentHandler on pXMLWriter
//ISAXErrorHandler是一個由MXXMLWriter使用的界面
MSXML2::ISAXErrorHandlerPtr pErrorHandler;
pErrorHandler=pXMLWriter; //calls QI for ISAXErrorHandler on pXMLWriter
// ISAXDTDHandler也是由MXXMLWriter使用的界面
MSXML2::ISAXDTDHandlerPtr pDTDHandler;
pDTDHandler=pXMLWriter; //calls QI for ISAXDTDHandler on pXMLWriter
//將輸出內容輸出到一個字符串中
pXMLWriter->put_output(CComVariant(L""));


一旦MXXMLWriter完成了,程序就會讀取文本文件,并生成供MXXMLWriter處理的SAX事件。程序如下面的表2所示:
表2:生成供MXXMLWriter使用的事件
std::getline(fileIn,lineFromFile);
while(fileIn.good())
{
npos=lineFromFile.find_first_of(",",nlast);
//確定當前行有一個“,”號;
//如果沒有發現,find_first_of返回std::wstring::npos
if(npos!=std::wstring::npos){
wElementName=A2W(lineFromFile.substr(nlast,npos-nlast).c_str());
// startElement元素
pContentHandler->startElement(L"",0,L"",0,
const_cast<wchar_t*>(wElementName.c_str()),
wElementName.length(),NULL);
nlast= ++npos;
// 獲取當前行的其他部分(元素值)
wElementValue=A2W(lineFromFile.substr(nlast).c_str());
// 字符
pContentHandler->characters(
const_cast<wchar_t*>(wElementValue.c_str()),
wElementValue.length());
// endElement元素
pContentHandler->endElement(L"",0,L"",0,
const_cast(wElementName.c_str()),
wElementName.length());
}
std::getline(fileIn,lineFromFile);
nlast=0;
}


上面的程序置于一個由輸入文件的狀態控制的循環中,它使用std::getline(...)方法逐行讀取輸入文件,并將讀取的行存儲在std::string類型變量lineFromFile中。MXXMLWriter期望的輸入數據類型為Unicode字符串,程序使用ANSI字符串使文檔的解析更簡單。這樣,程序在把從文件中讀取的ANSI字符串在傳遞給MXXMLWriter之前才轉換為Unicode字符串。
輸入文件是文本文件,每行中包括一個元素和元素值對兒。程序代碼能夠對由元素和元素值對組成的XML文檔進行處理。
表3:樣例文本文件
author, Essam Ahmed
topic, Using the Microsoft XML Parser...
author, Essam Ahmed
topic, Using the Microsoft XML Parser...
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<RootElement>
<author>Essam Ahmed</author>
<topic>Using the Microsoft XML Parser...</topic>
</ RootElement>


程序把其輸出內容輸出到屏幕上,如果想把輸出保存在文件中,可以使用重定向符>將輸出內容輸出到一個文件中。

結束語
這篇文章介紹了如何使用Microsoft XML 3.0 Parser中的一個組件━━MXXMLWriter來創建XML文檔。使用MXXMLWriter比自己編寫類似的代碼有幾點好處,它不但符合現有的標準,而且在標準改變時也無需升級自己的代碼。



主站蜘蛛池模板: 亚洲成人福利在线 | 亚洲人成网站看在线播放 | 亚洲天天综合 | 青青青激情视频在线最新 | 夜夜视频 | 亚洲免费福利视频 | 色88888久久久久久影院 | 亚洲综合色在线观看 | 青青青青青视频免费播放 | 日本天堂免费观看 | 日本最新免费二区 | 中文字幕国产精品 | 色妹子在线 | 视频免费在线观看 | 色天天综合 | 婷婷久操| 四虎影视在线观看 | 天天操天天干天天爽 | 手机在线成人精品视频网 | 亚洲国产成人久久综合一 | 欧美性最xxx | 新天堂在线 | 自拍视频免费 | 在线观看一区 | 青草视频免费看 | 色91视频 | 日本三级带日本三级带黄国产 | 天堂中文在线www | 天天色天天干天天 | 在线视频欧美日韩 | 日韩毛片在线观看 | 亚洲国产成人久久一区www | 日韩在线观看一区二区三区 | 伊人影院2019 | 午夜啪啪片 | 日韩污网站 | 色福利网| 日韩三级伦理在线 | 一级做a爰片欧美aaaa | 日本三级精品 | 日韩无砖专区 |