[英]Is this correct way to Parse inner element of XML by LINQ in C#
總是與LINQ to XML混淆。 我想從以下XML中將電子郵件提取為IEnumerable。
String xml =@"<?xml version=""1.0"" encoding=""utf-8""?>
<people>
<person firstname=""John"" lastname=""doe"">
<contactdetails>
<emailaddress>john@unknown.com</emailaddress>
</contactdetails>
</person>
<person firstname=""Jane"" lastname=""doe"">
<contactdetails>
<emailaddress>jane@unknown.com</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;
從xml獲取所有電子郵件
var e_mailsAll = doc.Descendants("person")
.Descendants("emailaddress")
.Select(x=>x.Value);
獲取每個人的第一封電子郵件(如果某人擁有多個電子郵件)
var e_mailsFirst = doc.Descendants("person")
.Select(x=>x.Descendants("emailaddress").FirstOrDefault())
.Where(x=>x!=null)
.Select(x=>x.Value);
您可以使用XPathSelectElements
以便使用XPath提取IEnumerable<XElement>
:
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<people>
<person firstname=""John"" lastname=""doe"">
<contactdetails>
<emailaddress>john@unknown.com</emailaddress>
</contactdetails>
</person>
<person firstname=""Jane"" lastname=""doe"">
<contactdetails>
<emailaddress>jane@unknown.com</emailaddress>
<phonenumber>001122334455</phonenumber>
</contactdetails>
</person>
</people>";
IEnumerable<XElement> elements = XDocument
.Parse(xml)
.XPathSelectElements("people/person/contactdetails/emailaddress");
然后,您將能夠使用LINQ Select
來提取一系列電子郵件:
string[] elements = XDocument
.Parse(xml)
.XPathSelectElements("people/person/contactdetails/emailaddress")
.Select(x => x.Value)
.ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.