gpt4 book ai didi

c# - 使用 LINQ 将 XML 转换为 SelectList

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:28 24 4
gpt4 key购买 nike

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

现在我认为这是因为我在这里只得到一个元素?但我不确定要怎么做才能做到这一点。

最佳答案

我认为您的查询有问题,因为您应该得到一个异常(exception)。

您正在尝试选择 <selectListItemDefinition> 的属性“key”和“value” ,但它们不存在。你实际上并没有使用 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")你会得到同样的行为。

关于c# - 使用 LINQ 将 XML 转换为 SelectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com