Итак, Noobie вопрос дня ...Linq для XML: Возвращение атрибутов из детей одного и того же имени и родителей одного и того же имени
У меня есть файл XML со следующей структурой:
<result>
<rowSet name="name">
<row name="name1" />
<row name="name2" />
<row name="name3" />
</rowSet>
<rowSet name="type">
<row type="type1" />
<row type="type2" />
<row type="type3" />
</rowSet>
etc..
</result>
Я пытался и, скорее, безуспешно, получить атрибуты строки из одного rowSet, основанного на имени атрибута rowSet:. Другими словами, я пытаюсь вытащить атрибуты из «строк», которые содержатся только в rowSet: Атрибут определенного имени.
Я попытался с помощью:
var rowSet = from rs in xmlDoc.Descendants("result")
where rs.Descendants("rowset").Attributes("name").Any(a => a.Value == "name")
select new
{
row = from r in xmlDoc.Descendants("row")
select new
{
skillID = r.Attribute("name"),
}
};
Однако это не дает более одного результата. Было довольно неприятно, и еще раз ... после того, как я попробовал 15 различных предложений, я не смог вспомнить исходный код для читателя.
Ответ был дан:
var rowNames = (from i in xmlDoc.Descendants("rowSet")
where (string)i.Attribute("name") == "name"
select i.Descendants("row")) // Had to move this last) to...
.Select(r => (string)r.Attribute("name")); // Here in order to get it to work
Я считаю, что это работает, но я слишком noobish, чтобы узнать, как итерацию через него, несмотря на то, что я могу получить доступ к данным через «Просмотр результатов» из отладчик, когда программа запущена.
Хорошо, так что я в состоянии получить этот запрос для запуска вправо (путем перемещения «)» первый), и когда я начинаю шагать через код, то rowNames имеет значения в нем. Тем не менее, я был очень неудачным в отображении информации в любом случае. Я играю с этим в консольном приложении, fyi.
Итак, это первая проблема.
Второе, если я начну делать мой XML немного более сложным, добавив несколько атрибутов для элементов строки, как:
<result>
<rowSet name="name">
<row fName="Ted" lName = "Happy" />
<row name="Billy" lName = "Maddison"/>
<row name="John" lName = "Doe"/>
</rowSet>
<rowSet name="type">
<row type="type1" type2 ="Hero"/>
<row type="type2" type2 ="Villain" />
<row type="type3" type2 ="Neutral"/>
</rowSet>
</result>
Как тогда я получить все атрибуты элемента?
Это кажется таким основным, поэтому я чувствую себя довольно отсталым на данный момент.
Можете ли вы уточнить желаемый результат? –
Просто хотите вернуть атрибуты разных «строк». – Josh