??ValidationType屬性設定驗證的類型,它可以是:DTD, XSD, XDR或none。假如沒有指定驗證的類型(用ValidationType.Auto選項),瀏覽器將主動的根據文件用最適合的驗證類型。在驗證過程中呈現任何錯誤,都會觸發ValidationEventHandler事件。假如未供給事件ValidationEventHandler事件處理程序,則拋出一個XML例外。定義ValidationEventHandler事件處理程序是用來捕捉任何在XML來源檔案中存在錯誤而引發XML異常的一種方法。要留心的是瀏覽器的原理是檢查一個文件是否是格局良好的,以及檢查文件是否與架構吻合。假如帶驗證的瀏覽器發明一個有嚴重的格局錯誤的XML文檔,只會觸發XmlException異常,它不會觸發其它的事件。
??驗證產生在使用者用Read方法向前移動指標時,一旦節點被分析和讀取,它獲得傳送過來的處理驗證的內部的物件。驗證把持是基於節點類型及被要求的驗證類型。它確認節點所有的屬性和節點所包含的子節點是否符合驗證條件。
??驗證物件在內部呼叫兩個不同作風的物件:DTD分析器和架構天生器(schema builder)。 DTD分析器處應目前節點的內容及不符合DTD的子樹。架構天生器會根據XDR或XSD架構對目前的節點建構一個SOM(schema object model)。架構天生器類別其實是所有指定為XDR和XSD架構天生器的基底類別。為什麼呢,固然XDR和XSD架構的許多雷同的方法都被加工處理過,但是它們在履行時的性能沒有差別。
??假如節點有子節點,用另一個臨時的瀏覽器收集子節點信息,因此節點的架構信息能被完整地驗證。你可以看圖五:
??留心,儘管XmlValidatingReader類別的結構函數可以接收一個XmlReader類別作為其瀏覽器,但是該瀏覽器只能是XmlTextReader類別的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例或者是它的一個實例一個派生類別的實例。這意味著你不能用其它從XmlReader派生的類別(例如自訂的XML瀏覽器)。在XmlValidatingReader類別的內部,它假設瀏覽器是一個子XmlTextReader物件及把傳進的瀏覽器明確的轉換成XmlTextReader類別。假如你用XmlNodeReader或自訂的瀏覽器器,程式在編譯時會出錯,執行時會拋出一個異常。
??節點瀏覽器
??XML瀏覽器供給一種增量式的方法(一個一個節點的讀取)來處理文件的內容。到目前為止,我們假設原始檔案是一個基於硬碟的流或是一個字串流,然而,我們不能保證在實際中會供給一個原始檔的XMLDOM物件給我們。在這種情況下,我們需要一個帶有特別的讀方法的特別的類別。對這種情況,.NET Framework供給了XmlNodeReader類別。
??就像XmlTextReader拜訪指定XML流中所有節點一樣,XmlNodeReader類別拜訪XMLDOM子樹的所有節點。 XMLDOM類別(在.NET Framework中的XmlDocument類別)支撐基於Xpath的方法,例如SelectNodes方法和SelectSingleNode方法。這些方法的作用是把匹配的節點放在記憶體中。假如你需要處理子樹中的所有節點,節點瀏覽器比用增量式方法處理節點的瀏覽用具有更高的效率:
// xmldomNode is the XML DOM node
XmlNodeReader nodeReader = new XmlNodeReader(xmldomNode );
while (nodeReader.Read())
{
// Do something here
}
??當你要在個人設定的檔案(例如web.先把這些資料填入XMLDOM樹中,再用XmlNodeReader類別與XMLDOM類別共同處理這些資料。這也是高效率的。
以上就是在.NET Framework中輕鬆處理XML資料(3-2) 的內容,更多相關內容請關注PHP中文網(www.php.cn)!