Я пишу программу для анализа некоторых сторонних XML-файлов. Структура что-то вроде ...Эффективно «свертывание» в XML-дерево с помощью xlinq?
<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 };
И я понимаю, что я мог бы сделать это в один очень долгий запрос с использованием «в» (который первоначально, как у меня было), но это только сделал его еще более плотным и трудно работать.
Кажется, что должен быть более простой способ сделать то, что я пытаюсь сделать.
Спасибо! На самом деле это была моя естественная склонность (попытка .Elements («name»), но в визуальной студии говорилось, что единственным аргументом, который я мог бы передать, было XName, поэтому я даже не пытался использовать строку, и я не мог выяснить, как сделать XName. Но да, это прекрасно работает (или, по крайней мере, компилятор не против, чтобы я помещал там строки ... Я еще не проверял его, но я подозреваю, что все должно быть хорошо) – Asmor
Yup, вы используете неявное преобразование из строки в XName, которое используется почти повсеместно :) –
XName вещь немного боль, поскольку «intellisense» недостаточно интеллектуальна, чтобы указать что строки неявно преобразуются. – Peter