我正在编写一个程序来解析一些第三方XML文件。结构就像......
<CharacterSheet>
...
<StatBlock>
...
<Stat>
...
<alias />
...
</Stat>
...
</StatBlock>
...
</CharacterSheet>
我正在使用它来获取linq的一些练习,而且我正在罚款我必须写一些非常丑陋的链式查询来获得我想要的,统计数据列表及其所有别名。
var CharSheet = from i in character.Elements()
where i.Name == "CharacterSheet"
select i;
var StatBlocks = from sheet in CharSheet
from statBlock in sheet.Elements()
where statBlock.Name == "StatBlock"
select statBlock;
var stats = from statBlock in StatBlocks
from stat in statBlock.Elements()
select stat;
var statAliases = from stat in stats
from alias in stat.Elements()
where alias.Name == "alias"
select new { stat, alias };
而且我意识到我可以使用“into”(原来我是如何使用它)将其变成一个非常长的查询,但这只会使它更加密集且难以使用。
似乎必须有一种更简单的方法来做我想做的事。
答案 0 :(得分:6)
您可以使用XPathSelectElements()
(这可能是一个更好的主意,说实话),或者您可以使用Elements()
扩展方法:
var query = character.Elements("CharacterSheet")
.Elements("StatsBlock")
.Elements()
.Elements("alias")
.Select(x => new { stat=x.Parent, alias=x};