記錄下一些讀取XML的方法,以避免到用的時候忘記了,還得花時間去找。spa
如今我有一個XML文件以下:code
如今我要查找名字爲"王五"的這我的的 Id 和sex(性別) 和age(年齡)xml
代碼:blog
static void Main(string[] args) { XDocument xdoc = XDocument.Load("4.xml"); //加載xml List<XElement> eles = new List<XElement>(); //用來獲取符合條件的節點集合 XElement ele = xdoc.Element("root"); //獲取根節點 string nameTxt = "王五"; //要查找的條件 TraditionalReadXML(ele,eles,nameTxt); //找到符合條件的數據添加到eles的集合裏 foreach (XElement item in eles) //遍歷查到的數據,輸出 { Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}", item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value); } Console.ReadKey(); } /// <summary> /// 傳統讀取XML /// </summary> /// <param name="ele">查到哪一個節點下的數據</param> /// <param name="eles">集合存放符合的數據</param> /// <param name="nameTxt">要查找的姓名</param> private static void TraditionalReadXML(XElement ele,List<XElement> eles,string nameTxt) { //首先遍歷ele下的全部子節點,注意是子節點,不能查到下下層的節點 foreach (XElement item in ele.Elements()) { //判斷這個元素的名字是否是name,若是是name,看內容是否是nameTxt if (item.Name.LocalName == "name") { if (item.Value == nameTxt) { //符合條件的節點,取其父級 eles.Add(item.Parent); } } //若是item裏面還有子節點就遞歸 TraditionalReadXML(item, eles, nameTxt); } }
執行代碼獲得的結果爲:遞歸
把上面的代碼改爲:string
static void Main(string[] args) { XDocument xdoc = XDocument.Load("4.xml"); //加載xml List<XElement> eles = new List<XElement>(); //獲取符合條件的節點集合 string nameTxt = "王五"; //要查找的條件 //得到符合條件的節點 var query = from s in xdoc.Descendants() where s.Name.LocalName == "name" && s.Value ==nameTxt select s.Parent; foreach (XElement item in query) //把符合條件的節點添加到eles集合 { eles.Add(item); } foreach (XElement item in eles) //遍歷查到的數據,輸出 { Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}", item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value); } Console.ReadKey();
}
加粗的地方爲linq寫法,它們的實現是同樣的,這樣會比普通的寫法簡單許多。it
把代碼改爲:io
static void Main(string[] args) { XDocument xdoc = XDocument.Load("4.xml"); //加載xml List<XElement> eles = new List<XElement>(); //獲取符合條件的節點集合 string nameTxt = "王五"; //要查找的條件 //遍歷節點,把符合條件的添加到 eles集合 foreach (XElement i in xdoc.Descendants().Where(e=>{ if(e.Name.LocalName=="name") { if(e.Value==nameTxt) { return true ; } } return false; })) { eles.Add(i.Parent); } foreach (XElement item in eles) //遍歷查到的數據,輸出 { Console.WriteLine("Id:{0},name:{1},sex:{2},age:{3}", item.Attribute("id").Value,item.Element("name").Value,item.Element("sex").Value,item.Element("age").Value); } Console.ReadKey(); }
以上是三種讀取XML的方法,能夠根據本身喜歡的方法去用。class