国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#基礎鞏固(3)-LinqToXML讀取XML

2019-11-14 13:53:56
字體:
來源:轉載
供稿:網友

記錄下一些讀取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的方法,可以根據自己喜歡的方法去用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓尼县| 灯塔市| 阳城县| 临夏县| 禄劝| 七台河市| 天津市| 仪征市| 宁明县| 天长市| 怀柔区| 新营市| 司法| 元朗区| 承德县| 凤翔县| 兴业县| 射洪县| 平江县| 屯留县| 山东省| 甘洛县| 饶阳县| 武陟县| 大邑县| 新和县| 丰县| 郑州市| 万载县| 长乐市| 乐平市| 饶河县| 朔州市| 华亭县| 扶绥县| 绥江县| 兖州市| 东方市| 新安县| 确山县| 广州市|