前段时间我问过如何从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)而不是第二个副本。
知道如何解决这个问题吗?
尼克
答案 0 :(得分:0)
您似乎想要选择test
元素的子元素。您可以使用SelectMany
和Elements
方法执行此操作:
var copyitems =
doc.Descendants("test") //Select all "test" elements
.SelectMany(x => x.Elements()) //Select all children of all "test" elements
.Select(s =>
{
//...
})
.ToList();