LINQ to XML获取XElement值

我遇到了从LINQ到XML查询返回一些值的问题。 我从SOAP Web服务获取XML并通过它并将其解析为XDocument进行查询

XML:

     0 Success true   Garden Waste Collection Service RR3 GDN TueFort2 Tuesday 01/04/2014   Recycling Collection Service RR8 REC TueFort2 Tuesday 01/04/2014   Refuse Collection Service RR8 REF TueFort1 Tuesday 08/04/2014   Garden Waste Collection Service RR3 GDN TueFort2 Tuesday 15/04/2014   Recycling Collection Service RR8 REC TueFort2 Tuesday 15/04/2014   Refuse Collection Service RR8 REF TueFort1 Tuesday 22/04/2014       

CS代码:

 using (var reader = new StreamReader(response.GetResponseStream())) { string xmlString = reader.ReadToEnd(); XDocument xmlDoc = XDocument.Parse(xmlString); var collections = (from p in xmlDoc.Descendants() where p.Name.LocalName == "Collection" select p); var test = xmlDoc.Descendants("Collection").Select( x => new { day = x.Element("Day").Value, date = x.Element("Date").Value }); Debug.WriteLine("STOP HERE"); var test2 = (from p in xmlDoc.Descendants() where p.Name.LocalName == "Collection" select new{ day = p.Element("Day").Value, date = p.Element("Date").Value }); } 

上面的集合var给出了一个节点列表,但是test和test2 var没有得到我的子元素。

任何帮助赞赏!

这就是令你头痛的原因:

 xmlns="http://webservices.whitespacews.com/" 

这是为元素及其后代设置默认命名空间 – 因此您需要查找本地名称为Collections和该命名空间的元素。 同样是其他元素。 幸运的是,LINQ to XML为您提供了便利:

 XNamespace ns = "http://webservices.whitespacews.com/"; ... var test = xmlDoc.Descendants(ns + "Collection") .Select(x => new { day = x.Element(ns + "Day").Value, date = x.Element(ns + "Date").Value }); 

我怀疑你的test2集合会有元素,但因为它无法找到DayDate元素,所以获取Value属性将导致NullReferenceException

另请注意,您无需创建自己的阅读器等。我会将您的代码编写为:

 XNamespace ns = "http://webservices.whitespacews.com/"; XDocument doc; using (var stream = response.GetResponseStream()) { doc = XDocument.Load(stream); } var query = xmlDoc.Descendants(ns + "Collection") .Select(x => new { Day = x.Element(ns + "Day").Value, Date = x.Element(ns + "Date").Value });