C#linq获取后代中的所有项目并拆分该值

时间:2016-05-20 12:44:11

标签: c# linq copy

前段时间我问过如何从xml文档中读取并使用该值(请参阅C# xdocument read from element and put the value into string

现在我有以下问题,最后一个线程中给出的解决方案有效,但只有在我这样做的时候:

<root>
    <test>
        <Copy01>@SRCDIR@\test1 ,@INSTDIR@\test2</Copy01>
    </test>
</root>

但我想要这样的事情:

<root>
    <test>
        <Copy01>@SRCDIR@\test1 ,@INSTDIR@\test2</Copy01>
        <Copy02>@SRCDIR@\test3 ,@INSTDIR@\test4</Copy02>
    </test>
</root

但在C#中使用以下代码:

 var copyitems = doc.Descendants(param[1])

                        .Select(s =>

                    {
                        var splits = s.Value.Split(new string[] { "@SRCDIR@", "@INSTDIR@" }, StringSplitOptions.RemoveEmptyEntries); // split the string to separate source and destination.
                        return new { Source = splits[0].Replace(",", ""), Destination = splits[1].Replace(",", "") };
                    })
                    .ToList();

在这种情况下,param [1]的值是“test” 它只选择第一个副本(copy01)而不是第二个副本。

知道如何解决这个问题吗?

尼克

1 个答案:

答案 0 :(得分:0)

您似乎想要选择test元素的子元素。您可以使用SelectManyElements方法执行此操作:

var copyitems =
    doc.Descendants("test") //Select all "test" elements
    .SelectMany(x => x.Elements()) //Select all children of all "test" elements
    .Select(s => 
    {
        //...
    })
    .ToList();