簡體   English   中英

這是通過C#中的LINQ解析XML內部元素的正確方法嗎

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM