2010-01-31 109 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