首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Framework 輕鬆處理 XML 數據(三):驗證閱讀器與節點閱讀器實戰

     編輯:關於.NET

XmlValidatingReader:多標準驗證支援

XmlValidatingReader 實現 XmlReader,支援 DTD、XDR(Microsoft 早期架構)、XSD(W3C 標準)三種驗證類型。可驗證完整 XML 文檔或片段。

架構設計

  • 工作在現有 XmlReader(通常為 XmlTextReader)之上
  • XmlTextReader 負責讀取節點,XmlValidatingReader 依驗證類型逐塊驗證
  • 僅實現 XmlReader 極小功能子集,構造函數明確依賴現有文字閱讀器

構造函數

public XmlValidatingReader(XmlReader);
public XmlValidatingReader(Stream, XmlNodeType, XmlParserContext);
public XmlValidatingReader(string, XmlNodeType, XmlParserContext);

特有方法

  • Skip():跳過當前節點所有子節點(含驗證),不可跳過格式錯誤 XML
  • ReadTypedValue():返回 XSD 類型對應的 CLR 類型,找不到則返回字串值

增量驗證機制

驗證無返回布爾值的整體有效性方法。使用 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();

驗證內部架構

關鍵屬性與事件

  • ValidationType:DTD/XSD/XDR/None/Auto(自動選擇最適合類型)
  • ValidationEventHandler:驗證錯誤觸發。未提供處理器則拋 XmlException
  • 嚴重格式錯誤僅觸發 XmlException,不觸發驗證事件

內部驗證引擎

  • DTD 分析器:處理節點內容與不符合 DTD 的子樹
  • 架構生成器:依 XDR/XSD 建構 SOM(Schema Object Model),兩者共用基類,執行效能無差異
  • 子節點驗證時創建臨時閱讀器收集資訊

重要限制

構造函數雖接受 XmlReader,但僅支援 XmlTextReader 或其派生類。內部會強制轉型,傳入 XmlNodeReader 或自訂閱讀器會編譯通過但運行時拋異常。

XmlNodeReader:操作記憶體中 DOM 樹

XmlTextReader 假設來源為檔案/字串流,但實際常面對已載入的 XmlDocument 物件。XmlNodeReader 訪問 DOM 子樹所有節點,配合 XPath(SelectNodes/SelectSingleNode)高效處理子樹節點。

範例

XmlNodeReader nodeReader = new XmlNodeReader(xmldomNode);
while (nodeReader.Read())
{
    // 處理每個節點
}

應用場景

配置檔(如 Web.config)自訂資料:先填充至 DOM 树,再結合 XmlNodeReader 處理,高效且直觀。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved