簡體   English   中英

如何在C#中使用LINQ讀取Xml文件

[英]How to read Xml File Using LINQ in C#

我有一個XML文件,例如

<root>
  <Child val1="1" val2="2"/>
  <Child val1="3" val2="4"/>
  <Child val1="5" val2="6"/>
  <Child val1="7" val2="8"/>
  <Child val1="9" val2="10"/>
  <Child val1="11" val2="12"/>
  <Child val1="13" val2="14"/>
</root>

我需要將val1val2的屬性值讀取到List<String>

結果列表將包含

{ "1" , "2" , "3" , ........ ,"13" , "14" }

這是我的示例代碼:

XDocument XD = XDocument.Load(Application.StartupPath + "\\foo.xml");
List<String> l_lstTemp = XD.Descendants("Child")
                           .Select(X => new List<String> { X.Attribute("val1").Value,
                                                           X.Attribute("val2").Value })
                           .SelectMany(X => X)
                           .Distinct()
                           .ToList();

有什么辦法可以使用Select而不是selectMany來做到這一點?

如何修改我現有的expression

SelectMany正是在這里您想要做的-將結果從一系列字符串列表展平為單個字符串序列。 您為什么要采用能准確表達所需內容的工作代碼並進行更改?

誠然,您可以通過使用SelectMany稍有不同來簡化它,並使用數組而不是列表來簡化它:

XDocument doc = XDocument.Load(Application.StartupPath + "\\foo.xml");
List<String> values = doc.Descendants("Child")
                         .SelectMany(x => new[] { x.Attribute("val1").Value,
                                                  x.Attribute("val2").Value })
                         .Distinct()
                         .ToList();

您的問題場景正是SelectMany所能解決的,因此我認為我們為消除該問題可能會做的任何事情都會使事情復雜化。 :)

最初的.Select返回IEnumerable的結果,如果沒有.SelectMany,我們將得到:

{
 IEnumerable<string> [ "1", "2" ]
 IEnumerable<string> [ "3", "4" ]
 etc...
}

.SelectMany使用一個IEnumerable會將初始結果“展平”到另一個IEnumerable中,從而為您提供所需的內容:

{
 IEnumerable<string> [ "1", "2", "3", "4" ]
}

這是一篇很棒的文章,更好地描述了LINQ SelectMany運算符的外觀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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