2016-04-12 108 views
0

LINQ的新手。 示例XML:將XML解析爲Tuple

<item name="XX"> 
    <inside type="A"/> 
    <inside type="B" /> 
</item> 
<item name="YY"> 
    <inside type="C"/> 
    <inside type="D" /> 
</item> 

我想將其解析到的元組:

(XX, A) 
(XX, B) 
(YY, C) 
(YY, D) 

到目前爲止,我可以檢索第一線在線:使用下面的代碼(XX, A)以及每個項目的(YY, C)

var selected = (from item in doc.Root.Elements() 
let inside = item.Element(XName.Get("inside", item.GetDefaultNamespace().NamespaceName)) 
select Tuple.Create(item.Attribute("name").Value, 
inside.Attribute("type").Value)).ToList(); 

我相信我應該修改item.Elementitem.Elements但到目前爲止沒有運氣。

+0

不知道這是任何意義的,但是你錯過了後內部元件B和d關閉「所以你示例XML ISN 't well formed – auburg

+0

只是錯字,沒有意義 – Dancia

回答

1

而不是使用item.Element你應該遍歷item.Elements

var selected = (from item in doc.Root.Elements() 
       from inside in item.Elements("inside") 
       select Tuple.Create(
         item.Attribute("name").Value, 
         inside.Attribute("type").Value) 
       ).ToList(); 
+0

正是我在找的東西,我知道它是'.ElementS',但不知道如何使用它。 – Dancia

1
var tuples = XElement.Parse(xml).Descendants("item") 
    .SelectMany(item => item.Elements() 
     .Select(inside => Tuple.Create(item.Attribute("name"), inside.Attribute("type")))); 

您可以使用SelectMany來幫助您從單個元素中構建元組的集合。