Xml是擴展標記語言的簡寫,是一種開發的文本格式。
啰嗦幾句兒:老師布置的一個小作業卻讓我的腦細胞死了一堆,難的不是代碼,是n多嵌套的if、foreach,做完這個,我使勁兒想:我一女孩,沒有更多女孩的生活整天對着電腦學,累的不行但這水平就不見長,哪兒出錯了呢?----腦袋瓜子不夠用。。。 哎,來句老師的話緩解一下:“JUST DO IT!很多孩子聽了喬丹的話,從此進入IT行業~~~”
over,我還是把這個簡單但卻打擊了我下的小東西共享下吧。^_~
用C#讀取xml有很多方式,這里我就先使用XmlDocument讀取Xml,用一段代碼遍歷所有元素,並打印student的所有屬性和子節點的值。
1、school.xml,如下:
<?xml version="1.0" encoding="UTF-8"?> <!--啟明培訓學校學生信息: 1、一年級學生 2、二年級學生 --> <school name="啟明培訓學校"> <grades> <grade id="1" name="一年級"> <classes> <class id="101" name="一班"> <teachers> <teacher teach="語文"><teacherName><![CDATA[王軍]]></teacherName></teacher> <teacher teach="數學"><teacherName><![CDATA[周傑]]></teacherName></teacher> </teachers> <students> <student id="10101"> <name>亢陽</name> <sex>女</sex> </student> <student id="10102"> <name>田鎮南</name> <sex>男</sex> </student> <student id="10103"> <name>劉嘉</name> <sex>女</sex> </student> </students> </class> </classes> </grade> <grade id="2" name="二年級"> <classes> <class id="201" name="二班"> <teachers> <teacher teach="語文"><teacherName><![CDATA[胡軍]]></teacherName></teacher> <teacher teach="數學"><teacherName><![CDATA[王潔]]></teacherName></teacher> </teachers> <students > <student id="20101"> <name>胡艷</name> <sex>女</sex> </student> <student id="20102"> <name>張三</name> <sex>男</sex> </student> <student id="20103"> <name>李四</name> <sex>女</sex> </student> </students> </class> </classes> </grade> </grades> </school>
2、XMLReader.cs (我用的是控制台應用程序,直接附上全部代碼吧)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using System.Xml; 7 8 namespace XMLReader 9 { 10 class XMLReader 11 { 12 static void Main(string[] args) 13 { 14 string xmlFilePath = "school.xml"; 15 XmlDocument doc = new XmlDocument(); 16 doc.Load(xmlFilePath); 17 18 //學校 使用xpath表達式選擇文檔中所有的schoo的子節點 19 XmlNodeList schoolNodeList = doc.SelectNodes("/school"); 20 if (schoolNodeList != null) 21 { 22 foreach (XmlNode schoolNode in schoolNodeList) 23 { 24 //通過Attributes獲得屬性名為name的屬性 25 string schoolName = schoolNode.Attributes["name"].Value; 26 Console.WriteLine("學校:" + schoolName); 27 28 #region 年級 29 //通過SelectSingleNode方法獲得當前節點下的grades子節點 30 XmlNode gradesNode = schoolNode.SelectSingleNode("grades"); 31 if (gradesNode != null) 32 { 33 //通過ChildNodes屬性獲得grades的所有一級子節點 34 XmlNodeList gradeNodeList = gradesNode.ChildNodes; 35 if (gradeNodeList != null) 36 { 37 foreach (XmlNode gradeNode in gradeNodeList) 38 { 39 Console.WriteLine("\t"); 40 Console.WriteLine("年級:" + gradeNode.Attributes["name"].Value + " ID:" + gradeNode.Attributes["id"].Value); 41 42 #region 班級 43 //通過SelectSingleNode方法獲得當前節點下的classes子節點 44 XmlNode classesNode = gradeNode.SelectSingleNode("classes"); 45 if (classesNode != null) 46 { 47 //通過ChildNodes屬性獲得classes的所有一級子節點 48 XmlNodeList classNodeList = classesNode.ChildNodes; 49 if (classNodeList != null) 50 { 51 foreach (XmlNode classNode in classNodeList) 52 { 53 Console.WriteLine(" 班級:" + classNode.Attributes["name"].Value + " ID:" + classNode.Attributes["id"].Value); 54 55 #region 老師 56 XmlNode teachersNode = classNode.SelectSingleNode("teachers"); 57 if (teachersNode != null) 58 { 59 XmlNodeList teacherNodeList = teachersNode.ChildNodes; 60 if (teacherNodeList != null) 61 { 62 foreach (XmlNode teacherNode in teacherNodeList) 63 { 64 XmlNode teacherNameNode = teacherNode.FirstChild; 65 XmlCDataSection cdate = (XmlCDataSection)teacherNameNode.FirstChild; 66 if (cdate != null) 67 { 68 Console.WriteLine(" "+teacherNode.Attributes["teach"].Value + "老師:"+cdate.InnerText.Trim()); 69 70 } 71 } 72 } 73 } 74 #endregion 老師 75 76 #region 所有學生 77 XmlNode studentsNode = classNode.SelectSingleNode("students"); 78 if (studentsNode != null) 79 { 80 XmlNodeList studentNodeList = studentsNode.ChildNodes; 81 if (studentNodeList != null) 82 { 83 foreach (XmlNode studentNode in studentNodeList) 84 { 85 Console.WriteLine(" 學生:" + studentNode.Attributes["id"].Value); 86 87 //獲取student的屬性值name和文本 88 XmlNode stu1 = studentNode.FirstChild; 89 XmlElement xe1 = (XmlElement)stu1; 90 if (xe1 != null) 91 { 92 Console.WriteLine(" 姓名:" + xe1.InnerText.Trim()); 93 } 94 //獲取student的屬性值sex和文本 95 XmlNode stu2 = studentNode.LastChild; 96 XmlElement xe2 = (XmlElement)stu2; 97 if (xe2 != null) 98 { 99 Console.WriteLine(" 姓別:" + xe2.InnerText.Trim()); 100 } 101 } 102 } 103 #endregion 所有學生 104 } 105 } 106 } 107 #endregion 班級 108 } 109 } 110 } 111 #endregion 年級 112 Console.Write("\r\n按隨意鍵跳出"); 113 Console.ReadKey(); 114 } 115 116 } 117 } 118 } 119 } 120 }
ok,運行,如圖:
-- 后記,學的xml不多,做完之后,我不得不對自己說:IT,要學的太多了,...>_<...