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”方法。