我正在尝试从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>
那就是我要变成一个SelectList的XML字符串。
这就是我正在尝试做的事情...
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
现在我想是因为我在这里只得到一个元素?但是我不确定该怎么做才能做到这一点。
最佳答案
我认为您的查询有问题,因为您应该遇到例外。
您试图选择<selectListItemDefinition>
的属性“键”和“值”,但它们不存在。而且您实际上并没有在select子句中使用listItem
。
您的第一行将返回名为“ selectListItemDefinition”的所有节点的IEnumerable<XElement>
。您的第二行只是获取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%确信XML文档中唯一被称为
<item>
的元素就是您想要的元素,则可以用一个from listItem in xDoc.Descendants("item")
替换第一行和第二行,您将获得相同的行为。关于c# - 使用LINQ将XML转换为SelectList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10822865/