XmlValidatingReader 實現 XmlReader,支援 DTD、XDR(Microsoft 早期架構)、XSD(W3C 標準)三種驗證類型。可驗證完整 XML 文檔或片段。
public XmlValidatingReader(XmlReader);
public XmlValidatingReader(Stream, XmlNodeType, XmlParserContext);
public XmlValidatingReader(string, XmlNodeType, XmlParserContext);
驗證無返回布爾值的整體有效性方法。使用 Read 逐節點讀取,每步驗證當前節點結構是否符合 Schema。不符合拋出異常。
XmlTextReader xtr = new XmlTextReader(fileName);
XmlValidatingReader vreader = new XmlValidatingReader(xtr);
vreader.ValidationType = ValidationType.Auto;
vreader.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandle);
vreader.Read();
vreader.MoveToContent();
while (vreader.Read()) {}
xtr.Close();
vreader.Close();

構造函數雖接受 XmlReader,但僅支援 XmlTextReader 或其派生類。內部會強制轉型,傳入 XmlNodeReader 或自訂閱讀器會編譯通過但運行時拋異常。
XmlTextReader 假設來源為檔案/字串流,但實際常面對已載入的 XmlDocument 物件。XmlNodeReader 訪問 DOM 子樹所有節點,配合 XPath(SelectNodes/SelectSingleNode)高效處理子樹節點。
XmlNodeReader nodeReader = new XmlNodeReader(xmldomNode);
while (nodeReader.Read())
{
// 處理每個節點
}
配置檔(如 Web.config)自訂資料:先填充至 DOM 树,再結合 XmlNodeReader 處理,高效且直觀。