【问题标题】:Linq to Xml Convert a listLinq to Xml 转换列表
【发布时间】:2010-01-31 05:18:11
【问题描述】:

我无法思考如何在 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;
}

【问题讨论】:

    标签: c# .net linq linq-to-xml


    【解决方案1】:

    试试这个:

    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 的情况,反之则不行。

    【讨论】:

    • @Dennis 我想我不够快 ;) 我从示例中删除了它,但它实际上是 LINQPad 中的一种扩展方法,可以将对象转储到输出窗口。非常方便快速调试。您可以让 LINQPad 试用或下载 VS2008 C# 示例,它包含在 ObjectWriter 中。
    • 当你通过时我正在输入一个答案,所以我马上就看到了。我不是一直使用 C#,所以我不确定最好的方法。你的答案看起来很棒!
    • @Dennis 这有点棘手,因为所有元素都是根的直接后代。如果他们是另一个元素的孩子,那就更容易了。顺便说一句,该项目被称为ObjectDumper,而不是 ObjectWriter。您可以从示例中编译它,然后在其他项目中引用它。使其成为扩展方法要方便得多。我上一条评论的时间限制已过期,因此我无法返回编辑它。
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多