使用xlinq有效地“深入”到XML树中?

时间:2009-06-10 16:29:47

标签: c# xml linq linq-to-xml

我正在编写一个程序来解析一些第三方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”(原来我是如何使用它)将其变成一个非常长的查询,但这只会使它更加密集且难以使用。

似乎必须有一种更简单的方法来做我想做的事。

1 个答案:

答案 0 :(得分:6)

您可以使用XPathSelectElements()(这可能是一个更好的主意,说实话),或者您可以使用Elements()扩展方法:

var query = character.Elements("CharacterSheet")
                     .Elements("StatsBlock")
                     .Elements()
                     .Elements("alias")
                     .Select(x => new { stat=x.Parent, alias=x};