欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年04月08日 17:08:33   作者:hzy3774  
這篇文章主要介紹了詳解借助.NET框架中的XmlTextReader類讀取XML的方法,這種方式的執(zhí)行效率還是比較令人滿意的,需要的朋友可以參考下

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

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

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

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

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

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

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();//關(guān)閉閱讀器 
      Console.WriteLine("Count is " + count); 
      Console.ReadKey(); 
    } 

201648170644727.jpg (163×134)

 
當然也可以用xmlDocument進行結(jié)構(gòu)化讀取,但是讀取前系統(tǒng)會把整個文檔的結(jié)構(gòu)獲取進來

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");//讀取根節(jié)點的所有子節(jié)點,放到XmlNodeList中 
 
      foreach (XmlNode node in list)//從list中遍歷所有節(jié)點 
      { 
        XmlElement ele = (XmlElement)node;//節(jié)點可以有中間文本但是沒有屬性值,所以要先轉(zhuǎn)成element才能讀出屬性值 
        Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//讀取數(shù)據(jù)/顯示 
      } 
 
      Console.ReadKey(); 
    } 

201648170731876.jpg (281×164)

 執(zhí)行效果完全一樣

相關(guān)文章

  • C# 動態(tài)加載程序集信息

    C# 動態(tài)加載程序集信息

    在設(shè)計模式的策略模式中,需要動態(tài)加載程序集信息,本文通過一個簡單的實例,來講解動態(tài)加載Dll需要的知識點。下面跟著小編一起來看下吧
    2017-03-03
  • C#窗體傳值代碼方法

    C#窗體傳值代碼方法

    在本篇文章里小編給大家整理的是關(guān)于C#窗體傳值代碼內(nèi)容,需要的朋友們可以跟著學習參考下。
    2020-02-02
  • C#使用Task實現(xiàn)執(zhí)行并行任務(wù)的原理的示例詳解

    C#使用Task實現(xiàn)執(zhí)行并行任務(wù)的原理的示例詳解

    Task是一個表示異步操作的類,它提供了一種簡單、輕量級的方式來創(chuàng)建多線程應用程序。本文就來和大家聊聊在C#中如何使用Task執(zhí)行并行任務(wù)吧
    2023-04-04
  • 如何在C#9 中使用頂級程序 (top-level)

    如何在C#9 中使用頂級程序 (top-level)

    這篇文章主要介紹了如何在C#9 中使用頂級程序 (top-level),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#編程獲取資源文件中圖片的方法

    C#編程獲取資源文件中圖片的方法

    這篇文章主要介紹了C#編程獲取資源文件中圖片的方法,涉及C#針對項目中資源文件操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 通過C#實現(xiàn)自動售貨機接口

    通過C#實現(xiàn)自動售貨機接口

    這篇文章主要介紹了通過C#實現(xiàn)自動售貨機接口,需要的朋友可以參考下
    2015-07-07
  • WPF+ASP.NET SignalR實現(xiàn)動態(tài)折線圖的繪制

    WPF+ASP.NET SignalR實現(xiàn)動態(tài)折線圖的繪制

    這篇文章將以一個簡單的動態(tài)折線圖示例,簡述如何通過ASP.NET SignalR實現(xiàn)后臺通知功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-01-01
  • 給 c# 程序員的十個重要提示

    給 c# 程序員的十個重要提示

    這篇文章主要介紹了給 c# 程序員的十個重要提示,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#處理Paint事件的方法

    C#處理Paint事件的方法

    這篇文章主要介紹了C#處理Paint事件的方法,實例分析了C#使用Paint進行圖形繪制的技巧,需要的朋友可以參考下
    2015-06-06
  • C#實現(xiàn)清空回收站的方法

    C#實現(xiàn)清空回收站的方法

    這篇文章主要介紹了C#實現(xiàn)清空回收站的方法,涉及C#系統(tǒng)回收站的清空技巧,非常簡單實用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08

最新評論