gpt4 book ai didi

c# - LINQ to XML - Where 子句

转载 作者:数据小太阳 更新时间:2023-10-29 02:15:13 25 4
gpt4 key购买 nike

我有一个包含两种类型信息的 XML 文件 - 位置和作业类型,这由 SLvl 值确定。我希望将这些的 SearchTxt 值绑定(bind)到 2 个下拉菜单(一个用于位置,一个用于工作类型)以用作我页面上的过滤器。

问题是我不能完全让我的 where 子句过滤 SLvl 值。使用 where 子句不返回任何结果。如果我删除它,查询会返回所有文本值。

C#

using System.Xml.Linq;
using System.Linq;
.....

// Loading from file
XDocument loaded = XDocument.Load(@"http://[LINKREMOVED]/vacancies.aspx");

// Query the data
var q = (from c in loaded.Descendants("items")
where c.Element("SLvl").ToString() == "0"
select c.Element("SearchTxt").ToString()).Distinct();

// Populate drop down
foreach(string name in q)
{
ddlLocation.Items.Add(new ListItem(name, name));
}

XML:

<VacancyMatch>
<items>
<SearchID>60</SearchID>
<SearchTxt>Scotland</SearchTxt>
<ParentID>0</ParentID>
<SearchCatID>1</SearchCatID>
<SLvl>1</SLvl>
<SubCat>1</SubCat>
</items>
<items>
<SearchID>92</SearchID>
<SearchTxt>Accounting</SearchTxt>
<ParentID>60</ParentID>
<SearchCatID>2</SearchCatID>
<SLvl>2</SLvl>
<SubCat>2</SubCat>
</items>
... More items here
</VacancyMatch>

我猜问题是数据在同一层级?这是我第一次使用 LINQ to XML,所以非常感谢任何帮助。笔记:XML 由第三方提供,因此格式由他们决定。

最佳答案

删除 .ToString() 并使用 .Value属性代替:

var values = loaded.Descendants("items")
.Where(i => i.Element("SLvl").Value == "0")
.Select(i => i.Element("SearchTxt").Value)
.Distinct();

在 XElement 上调用 ToString() 将以文本形式返回整个节点。例如,如果我们将上面查询中的 i.Element("SearchTxt").Value 更改为 i.Element("SearchTxt").ToString() 它将产生字符串如:

<SearchTxt>Accounting</SearchTxt>

访问 Value 属性将提取节点的内部文本 - 在本例中为 “Accounting”

关于c# - LINQ to XML - Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8756888/

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