2010-01-31 141 views
4

我在圍繞如何在linq中執行此操作時遇到了麻煩。Linq to Xml轉換列表

我如何轉換這一點:

<mytags> 
    <tag1>hello</tag1> 
    <tag2>hello</tag2> 
    <tag1>MissingTag</tag1> 
    <tag1>Goodbye</tag1> 
    <tag2>Goodbye</tag2> 
</mytags> 

這個

List<MyObject> 

public class MyObject 
{ 
    public tag1; 
    public tag2; 
} 

回答

4

嘗試了這一點:

string input = "<mytags><tag1>hello</tag1><tag2>hello</tag2><tag1>MissingTag</tag1><tag1>Goodbye</tag1><tag2>Goodbye</tag2></mytags>"; 
var xml = XElement.Parse(input); 
var list = (from x in xml.Elements("tag1") 
      let next = x.NextNode as XElement 
      select new MyObject 
      { 
       Tag1 = x.Value, 
       Tag2 = (next != null && next.Name == "tag2") ? next.Value : "" 
      }).ToList(); 

的情況下這僅適用於其中TAG2缺失,而不是其他方式。

+0

'.Dump()'做了什麼? – CoderDennis 2010-01-31 05:43:54

+0

@丹尼斯我猜我不夠快;)我從我的示例中刪除它,但它實際上是LINQPad中的一個擴展方法,它將對象轉儲到輸出窗口。非常方便快速調試。您可以讓LINQPad嘗試或下載VS2008 C#示例,並將其作爲ObjectWriter包含在內。 – 2010-01-31 05:46:27

+0

我剛剛打過一個答案,所以我馬上就看到了。我一直不使用C#,所以我不確定最好的方式來做到這一點。你的回答看起來很棒! – CoderDennis 2010-01-31 05:48:57