国产探花免费观看_亚洲丰满少妇自慰呻吟_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的方法,可以根據自己喜歡的方法去用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天全县| 黄石市| 邢台市| 荥阳市| 丰宁| 缙云县| 武川县| 东丽区| 平武县| 彰化县| 金山区| 姚安县| 涞源县| 鹤壁市| 巴林右旗| 古交市| 辽阳县| 曲周县| 凤冈县| 松溪县| 威宁| 苍溪县| 沿河| 呼和浩特市| 旅游| 会理县| 资兴市| 务川| 呼和浩特市| 闽清县| 乌兰察布市| 天全县| 仙居县| 阿图什市| 苏尼特左旗| 柳林县| 修文县| 彝良县| 疏勒县| 鹿泉市| 鹿泉市|