程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基礎鞏固(3)-Linq To XML 讀取XML,

C#基礎鞏固(3)-Linq To XML 讀取XML,

編輯:C#入門知識

C#基礎鞏固(3)-Linq To XML 讀取XML,


記錄下一些讀取XML的方法,以免到用的時候忘記了,還得花時間去找。

一、傳統寫法讀取XML

      現在我有一個XML文件如下:

 

現在我要查找名字為"王五"的這個人的 Id 和sex(性別) 和age(年齡)

代碼:

 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);
            }
        }

執行代碼得到的結果為:

二、Linq寫法讀取XML

          把上面的代碼改成:

 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寫法,它們的實現是一樣的,這樣會比普通的寫法簡單許多。

三、Linq查詢lambda寫法

把代碼改成:

 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的方法,可以根據自己喜歡的方法去用。

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