国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

詳解C#借助.NET框架中的XmlTextReader類讀取XML的方法

2019-10-29 21:29:57
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了詳解借助.NET框架中的XmlTextReader類讀取XML的方法,這種方式的執行效率還是比較令人滿意的,需要的朋友可以參考下
 

XmlTextReader 提供對 XML 數據流的只進只讀訪問。當前節點指讀取器定位到的節點。使用任何讀方法推進讀取器并且屬性反映當前節點的值。
此類實現 XmlReader 并符合 W3C 可擴展標記語言 (XML) 1.0 和“XML 中的命名空間”建議。XmlTextReader 提供以下功能:

  • 執行格式良好的 XML 的規則。
  • XmlTextReader 不提供數據驗證。
  • 檢查 DocumentType 節點是否是格式良好的。XmlTextReader 檢查 DTD 的格式是否正確,但不使用 DTD 進行驗證。
  • 對于 NodeType 為 XmlNodeType.EntityReference 的節點,返回單個空 EntityReference 節點(即 Value 屬性為 String.Empty)。
  • 不展開默認屬性。

因為 XmlTextReader 不執行數據驗證所需的額外檢查,所以它提供快速格式正確性分析器。

若要執行數據驗證,請使用驗證 XmlReader。有關更多信息,請參見 使用 XmlReader 驗證 XML 數據。
若要從 XmlDocument 中讀取 XML 數據,請使用 XmlNodeReader。
XmlTextReader 在發生 XML 分析錯誤時引發 XmlException。引發異常后,讀取器的狀態不可預知。例如,報告的節點類型可能不同于當前節點的實際節點類型。使用 ReadState 屬性可以檢查讀取器是否處于錯誤狀態。
有關 XmlReader 類的進一步論述,請參見 用 XmlReader 讀取 XML。
安全注意事項:

  • 下面是使用 XmlTextReader 類時的注意事項。
  • XmlTextReader 引發的異常可能會泄漏您不希望冒泡到應用程序的路徑信息。應用程序必須捕捉異常并進行相應的處理。
  • DTD 處理在默認情況下是啟用的。如果擔心出現拒絕服務問題或者正在處理不受信任的源,則應禁用 DTD 處理。將 ProhibitDtd 屬性設置為 true 可禁用 DTD 處理。
  • 如果啟用了 DTD 處理,則可使用 XmlSecureResolver 限制 XmlTextReader 可訪問的資源。還可以設計應用程序以使 XML 處理受內存和時間的約束。例如,在 ASP.NET 應用程序中配置超時限制。
  • XML 數據可包括對 DTD 文件等外部資源的引用。在默認情況下,使用不具有用戶憑據的 XmlUrlResolver 對象解析外部資源。通過執行下列操作之一,可以使此操作更加安全:
  • 通過將 XmlResolver 屬性設置為 XmlSecureResolver 對象限制 XmlTextReader 可訪問的資源。
  • 通過將 XmlResolver 屬性設置為空引用(在 Visual Basic 中為 Nothing) 不允許 XmlReader 打開任何外部資源。
  • XML 數據可以包含大量需要很多時間才能處理的屬性、命名空間聲明、嵌套元素等。若要限制發送到 XmlTextReader 的輸入的大小,請創建自定義的 IStream 實現并為其提供 XmlTextReader。
  • ReadValueChunk 方法可用于處理大的數據流。此方法一次讀取少量字符,而不是為整個值分配一個字符串。
  • 默認情況下不展開常規實體。調用 ResolveEntity 方法時展開常規實體。

示例:
使用XmlTextReader從頭到尾閱讀xml文檔,比較適合大量數據讀取

static void Main(string[] args)     {       XmlTextReader reader;        if (File.Exists("student.xml"))//如果文件已存在,載入文檔       {         reader = new XmlTextReader("student.xml");       }       else//否則       {         return;       }        int count = 0;       while (reader.Read())//閱讀下一個       {         if (reader.Name == "student")         {           //顯示讀取的屬性和中間文本           Console.WriteLine(reader.GetAttribute("id") + " " + reader.GetAttribute("age") + " " + reader.ReadString());           count++;         }       }       reader.Close();//關閉閱讀器       Console.WriteLine("Count is " + count);       Console.ReadKey();     } 

C#,.NET框架,XmlTextReader

 
當然也可以用xmlDocument進行結構化讀取,但是讀取前系統會把整個文檔的結構獲取進來

static void Main(string[] args)     {       XmlDocument doc = new XmlDocument();        if (File.Exists("student.xml"))//如果文件已存在,載入文檔       {         doc.Load("student.xml");       }       else//否則       {         Console.WriteLine("文檔不存在!");         Console.ReadKey();         return;       }        XmlNodeList list = doc.DocumentElement.SelectNodes("student");//讀取根節點的所有子節點,放到XmlNodeList中        foreach (XmlNode node in list)//從list中遍歷所有節點       {         XmlElement ele = (XmlElement)node;//節點可以有中間文本但是沒有屬性值,所以要先轉成element才能讀出屬性值         Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//讀取數據/顯示       }        Console.ReadKey();     } 

C#,.NET框架,XmlTextReader

 執行效果完全一樣



注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高要市| 昭平县| 武川县| 兴安县| 莱阳市| 吐鲁番市| 龙州县| 远安县| 额尔古纳市| 佛学| 水富县| 嘉祥县| 田林县| 衡南县| 阿鲁科尔沁旗| 乳山市| 建始县| 芦溪县| 赤峰市| 岱山县| 广汉市| 兴隆县| 峡江县| 宝兴县| 博野县| 凤台县| 道孚县| 西昌市| 南康市| 松桃| 专栏| 禄丰县| 深圳市| 宁国市| 南开区| 堆龙德庆县| 天峨县| 临朐县| 唐山市| 兴安县| 土默特左旗|