程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 詳解C#借助.NET框架中的XmlTextReader類讀取XML的辦法

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

編輯:C#入門知識

詳解C#借助.NET框架中的XmlTextReader類讀取XML的辦法。本站提示廣大學習愛好者:(詳解C#借助.NET框架中的XmlTextReader類讀取XML的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C#借助.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(); 
    } 

201648170644727.jpg (163×134)

 
固然也能夠用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(); 
    } 

201648170731876.jpg (281×164)

 履行後果完整一樣

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved