XML для SelectList с использованием LINQ
Я пытаюсь получить список выбора из строки XML...
<?xml version="1.0" encoding="utf-8"?>
<selectListItemDefinition id="UPMCTypes">
<item key="bla1" value="bla" />
<item key="bla2" value="bla" />
<item key="bla3" value="bla" />
<item key="bla4" value="bla" />
<item key="bla5" value="bla" />
<item key="bla6" value="bla" />
<item key="bla7" value="bla" />
<item key="bla8" value="bla" />
<item key="bla9" value="bla" />
<item key="bla10" value="bla" />
<item key="bla11" value="bla" />
</selectListItemDefinition>
Это будет строка XML, которую я пытаюсь превратить в список Select List. Вот как я пытаюсь это сделать...
List<SelectListItem> SListItem =
(
from xmlSList in xDoc.Descendants("selectListItemDefinition")
let listItem = xmlSList.Elements("item")
select new SelectListItem
{
Key = xmlSList.Attribute("key").Value,
Value = xmlSList.Attribute("value").Value
}
).ToList();
Это только первый ключ-значение для меня.
Key "blah1" string
Value "blah" string
Теперь я думаю, что это потому, что я получаю только один элемент здесь? Но я не уверен, что бы я сделал, чтобы сделать это правильно.
1 ответ
Я думаю, что у вас есть проблема в вашем запросе, так как вы должны получить исключение.
Вы пытаетесь выбрать атрибуты "ключ" и "значение" из <selectListItemDefinition>
, но они не существуют. И вы на самом деле не используете listItem
в вашем предложении выбора.
Ваша первая строка возвращает IEnumerable<XElement>
всех узлов с именем "selectListItemDefinition". Ваша вторая строка просто принимает это IEnumerable<>
и присвоение дочерних элементов с именем "item" его переменной с именем listItem
,
Когда вы должны сделать это второй запрос, чтобы перебрать <selectListItemDefinition>
элементы вместо того, чтобы назначать его.
Так замени let listItem = xmlSList.Elements("item")
с from listItem in xmlSList.Elements("item")
и он должен вести себя так, как вы ожидаете.
полный запрос будет:
var SListItem =
(
from xmlSList in xDoc.Descendants("selectListItemDefinition")
from listItem in xmlSList.Elements("item")
select new SelectListItem
{
Key = listItem .Attribute("key").Value,
Value = listItem .Attribute("value").Value
}
).ToList();
И если вы на 100% уверены, что единственные элементы называются <item>
в вашем XML-документе есть те, которые вы хотите, вы можете заменить первую и вторую строки одной from listItem in xDoc.Descendants("item")
и вы получите такое же поведение.