??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.cofig檔案)中引用自訂的資料時,先把這些資料填充到XMLDOM樹中,然後用XmlNodeReader類與XMLDOM類聯合處理這些資料。這也是高效的。
以上就是在.NET Framework中輕鬆處理XML資料(3-2) 的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!