Linq To Xml问题使用XElement的方法Elements(XName)

我使用Linq To Xml时遇到问题。

一个简单的代码。 我有这个XML:

   aaa email@email.ext 2002-09-22 000:000000 Description for this contact   sss email@email.ext 2002-09-22 000:000000 Description for this contact   bbb email@email.ext 2002-09-22 000:000000 Description for this contact   ccc email@email.ext 2002-09-22 000:000000 Description for this contact  

我希望将每个联系人映射到对象Contact上。 为此,我使用这段代码:

 XDocument XDoc = XDocument.Load(System.Web.HttpRuntime.AppDomainAppPath + this.filesource); XElement XRoot = XDoc.Root; //XElement XEl = XElement.Load(this.filesource); var results = from e in XRoot.Elements("contact") select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null); List cntcts = new List(); foreach (Contact cntct in results) { cntcts.Add(cntct); } Contact[] c = cntcts.ToArray(); // Encapsulating element Elements final = new Elements(c); 

好吧只是不要介意所有:关注这个:

当我得到根节点时,它没问题,我得到了正确的结果。

当我使用select指令时,我尝试让每个节点都说:从e in

 XRoot.Elements("contact") 

好的,这就是问题:如果我使用:来自X在XRoot.Elements()中的e,我得到所有联系节点,但是如果我使用:来自X在XRoot.Elements(“联系人”)中的e我得到的东西:空的SET。

好吧,你告诉我:使用另一个:好的,我这样做,让我们使用: from e in XRoot.Elements() ,我得到所有节点,这是正确的from e in XRoot.Elements()问题:当说: select new Contact((string)e.Element("name"), (string)e.Element("email"), "1-1-1", null, null); 我尝试访问, …我必须使用.Element(“名称”)并且它不工作!!!!!!!!这是什么地狱??????? ??????? 它看起来我不符合我通过的名称但是怎么可能。 我知道Elements()函数需要重载一个参数,该参数是映射到字符串的XName。 请考虑我写的代码来自一个例子,它应该工作。

非常简单:游戏中有一个XML命名空间,你忽略了它:

  

您需要将它添加到Linq-to-XML查询中!

就像是:

 XNamespace ns = "http://www.example.com"; 

然后

 XRoot.Elements(ns + "contact") 

当然,在访问子元素时也使用XML命名空间:

 var results = from e in XRoot.Elements("contact") select new Contact(e.Element(ns + "name").Value, e.Element(ns + "email").Value, "1-1-1", null, null); 

这应该有所帮助。 有关更多详细信息,请参阅有关使用XML命名空间的MSDN文档。

对我来说,我解决了这个问题,因为我的XML中没有命名空间:

 xmldoc.Root.Elements("contact"); 

我忘了使用“Root”方法。