Эффективно "углубиться" в дерево XML с помощью xlinq? - PullRequest
0 голосов
/ 10 июня 2009

Я пишу программу для анализа некоторых сторонних 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 };

И я понимаю, что могу превратить это в один действительно длинный запрос, используя «в» (что изначально и было), но это только сделало его еще более плотным и трудным для работы.

Кажется, должен быть более простой способ сделать то, что я пытаюсь сделать.

1 Ответ

6 голосов
/ 10 июня 2009

Вы можете использовать XPathSelectElements() (если честно, это может быть лучше), или вы можете использовать метод расширения Elements():

var query = character.Elements("CharacterSheet")
                     .Elements("StatsBlock")
                     .Elements()
                     .Elements("alias")
                     .Select(x => new { stat=x.Parent, alias=x};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...