總是與LINQ to XML混淆。我想從以下XML中以IEnumerable的形式提取電子郵件。這是正確的解析LINQ的XML內部元素的方式嗎?C#
String xml [email protected]"<?xml version=""1.0"" encoding=""utf-8""?>
<people>
<person firstname=""John"" lastname=""doe"">
<contactdetails>
<emailaddress>[email protected]</emailaddress>
</contactdetails>
</person>
<person firstname=""Jane"" lastname=""doe"">
<contactdetails>
<emailaddress>[email protected]</emailaddress>
<phonenumber>001122334455</phonenumber>
</contactdetails>
</person>
</people>";
一些試驗後,我發現下面的代碼工作,但我不喜歡使用的ElementAt(0).value的(通常我不會在其他的示例代碼見)。這裏使用LINQ的最佳方式是什麼?
XDocument doc = XDocument.Parse(xml);
var emails = from p in doc.Descendants("person")
where p.Descendants("emailaddress").Any()
let email = (string)p.Descendants("emailaddress").ElementAt(0).Value
select email;
爲什麼不'XDocument.Parse(XML).XPathSelectElements( 「人/人/ contactdetails/EMAILADDRESS」)'? :) –
這不是關於XML。這是關於如何正確使用Linq來查詢集合。如果你確定人們只有一個'emailaddress',只需使用'p.Descendants(「emailaddress」)。Single()。Value' – Alireza