我正在尝试从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/

10-14 03:01