我有一个类似于以下内容的XML文件:
<novel>
<paragraphs>
<paragraph>
<choice>This is paragraph 1</choice>
<choice>Paragraph 1 alternative text</choice>
</paragraph>
<paragraph>
<choice>This is paragraph 2</choice>
<choice>Paragraph 2 alternative text</choice>
</paragraph>
</paragraphs>
</novel>
我正在使用LINQ将其读入我的程序。我还在学习LINQ。我希望对段落和选择进行二维数组映射,即段落[0] [0] =“这是段落1”和段落[1] [1] =“段落2替代文本”。
问题是我不确定如何在LINQ中嵌套这些数组。我在那一刻:
var paragraphsQuery =
from paragraphsNode in xDoc.Elements("novel").Elements("paragraphs")
from choiceNodes in paragraphsNode.Elements("paragraph").Elements("choice")
select choiceNodes.Value;
...但是这给了我一个所有选择的数组(我丢失了段落隔离)。似乎某种程度上我需要从select中的语句中做更多的事情?
有人可以给我任何建议吗?谢谢。
答案 0 :(得分:2)
您需要以下内容:
var paragraphsQuery = xDoc.Elements("novel")
.Elements("paragraphs")
.Elements("paragraph")
.Select(p => p.Elements("choice")
.Select(c => c.Value)
.ToList())
.ToList();
换句话说,在顶层你想要每个“paragraph”元素一个项目。然后,对于每个项目,您要查找“choice”元素的值,并将它们转换为列表。
(那将使用列表而不是数组 - 如果你真的想要,你可以使用数组,但是列表通常更容易使用。)