XmlTextReader 提供對 XML 數(shù)據(jù)流的只進(jìn)只讀訪問。當(dāng)前節(jié)點指讀取器定位到的節(jié)點。使用任何讀方法推進(jìn)讀取器并且屬性反映當(dāng)前節(jié)點的值。
此類實現(xiàn) XmlReader 并符合 W3C 可擴(kuò)展標(biāo)記語言 (XML) 1.0 和“XML 中的命名空間”建議。XmlTextReader 提供以下功能:
因為 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)不可預(yù)知。例如,報告的節(jié)點類型可能不同于當(dāng)前節(jié)點的實際節(jié)點類型。使用 ReadState 屬性可以檢查讀取器是否處于錯誤狀態(tài)。
有關(guān) XmlReader 類的進(jìn)一步論述,請參見 用 XmlReader 讀取 XML。
安全注意事項:
示例:
使用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(); } 
當(dāng)然也可以用xmlDocument進(jìn)行結(jié)構(gòu)化讀取,但是讀取前系統(tǒng)會把整個文檔的結(jié)構(gòu)獲取進(jìn)來
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(); } 
執(zhí)行效果完全一樣
新聞熱點
疑難解答
圖片精選