<Results>
<ResultSet>"nothing special" Description="More of nothing"
<Results>
<Result>
<Body>Four in this group</Body>
<Body2>this is more stuff I want</Body2>
<Body3>This is interesting stuff I want</Body3>
<Body4>this is more stuff I want</Body4>
</Result>
<Result>
<Something1>Only 3 in the group</Something1>
<ID>this is more stuff I want</ID>
<Stuff>This is interesting stuff I want</Stuff>
</Result>
<Result>
<Tag1>Only 3 in the group</Tag1>
<Tag2>this is more stuff I want</Tag2>
<Tag3>This is interesting stuff I want</Tag3>
</Result>
</Results>
</ResultSet>
</Results>
我如何使用Linq to XML来取出所有<Result>
块?正如您所看到的,每个块可以包含任意数量的元素,我不知道它们的名称。我的最终目标是将这些块打包成对象,然后我将在我的应用程序中传递。
我遇到的问题是我无法使用Linq将每个组分开。我能得到的最接近的是将所有<Result>
组中的所有元素都返回到一个大列表中(使用后代)。
编辑:这是我用来带回每个<Result>
群组中所有内容的代码。我无法弄清楚如何遍历此查询中的列表以打破名称/值对。我不知道元素的名称,所以我不能通过名字引用它们。最后,我只想要每个<Result>
中每个元素的名称/值对。
var query = from item in xml.Descendants("Result")
select item;
任何帮助?
谢谢,-Scott
答案 0 :(得分:2)
后代将使用给定名称获取所有后代节点。如果您想要具体,则需要逐个元素地向下遍历XML层次结构,例如xml.Element("ResultSet").Element("Results").Elements("Result")
。
这应该指向正确的方向:
var query = xml.Descendants("Result")
.Select(r => r.Elements()
.Select(e => new { Name = e.Name.LocalName, Value = e.Value }));
foreach (var result in query)
{
foreach (var item in result)
{
Console.WriteLine("{0} : {1}", item.Name, item.Value);
}
}
或者,您可以使用SelectMany
并展平结果集:
var query = xml.Descendants("Result")
.SelectMany(r => r.Elements()
.Select(e => new { Name = e.Name.LocalName, Value = e.Value }));
foreach (var item in query)
{
Console.WriteLine("{0} : {1}", item.Name, item.Value);
}