将列表转换为Linq to Xml

4

我很难理解如何在linq中做到这一点。

我该如何将此转换为linq:

<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;
}
1个回答

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();

这仅适用于标签2缺失的情况,而不是相反的情况。

@Dennis,我猜我不够快;) 我从我的示例中删除了它,但它实际上是LINQPad中的扩展方法,可以将对象转储到输出窗口。非常适用于快速调试。您可以获取LINQPad来尝试它,或者下载VS2008 C#示例,其中包括ObjectWriter。 - Ahmad Mageed
当你发来信息时,我正在回答一个问题,所以我立刻看到了它。我并不总是在使用C#,所以我不确定最好的方法是什么。你的答案看起来很棒! - CoderDennis
@Dennis,这有点棘手,因为所有元素都是根的直接后代。如果它们是另一个元素的子元素,那就更容易了。顺便说一下,该项目称为“ObjectDumper”,而不是ObjectWriter。您可以从示例中编译它,然后在其他项目中引用它。将其制作为扩展方法会更加方便。我的上一条评论的时间限制已过期,所以我无法返回并编辑它。 - Ahmad Mageed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接