C# 使用LINQ从属性化元素返回xml子元素
我得到了下面的XML,我试图根据父类的属性提取子类别的值,并将它们放在一个组合框中 XML 问题是,在我运行下面的代码之后,它只返回第一个元素值(在本例中是Major)。我有什么明显的遗漏吗 班级C# 使用LINQ从属性化元素返回xml子元素,c#,xml,linq,C#,Xml,Linq,我得到了下面的XML,我试图根据父类的属性提取子类别的值,并将它们放在一个组合框中 XML 问题是,在我运行下面的代码之后,它只返回第一个元素值(在本例中是Major)。我有什么明显的遗漏吗 班级 public static List<string> GetScalesComboBox() { XElement xelement = XElement.Load("data/static/Categories.xml");
public static List<string> GetScalesComboBox()
{
XElement xelement = XElement.Load("data/static/Categories.xml");
var querylist = new List<String>();
var Subcat = from a in xelement.Elements("Cat")
where (string)a.Attribute("id") == "Scales"
select a;
foreach (XElement e in Subcat)
{
string Cate = e.Element("Subcat").Value;
querylist.Add(Cate);
}
return querylist;
}
public静态列表GetScalesComboBox()
{
XElement=XElement.Load(“data/static/Categories.xml”);
var querylist=新列表();
var Subcat=来自元素中的元素(“Cat”)
其中(字符串)a.Attribute(“id”)=“Scales”
选择一个;
foreach(子集合中的元素e)
{
字符串Cate=e.Element(“Subcat”).值;
添加查询列表(Cate);
}
返回查询列表;
}
然后用它进入组合框
List<String> ScaleComboList = XMLUtility.GetScalesComboBox();
for (int i = 0; i < ScaleComboList.Count; i++)
{
CMB_SubCategory.AddItem(ScaleComboList[i]);
}
CMB_SubCategory.selectedIndex = 0;
CMB_SubCategory.Enabled = true;
List ScaleComboList=xmlputility.GetScalesComboBox();
for(int i=0;i
任何帮助都会很好。谢谢。在您的
foreach
循环中,在字符串Cate=e.Element(“Subcat”).Value行中,您只选择了第一个元素。您可以尝试将循环的头更改为
(Subcat.Elements()中的元素e)
,它将遍历所有子元素。
之后,将循环体更改为querylist.Add(e.Value)代码>
完整代码:
foreach (XElement e in Subcat.Elements())
querylist.Add(e.Value);
我永远都不明白为什么人们要费劲地抓取屏幕,而不是复制和粘贴代码。首先Subcat
实际上是“Cat”元素的集合,所以这不是一个好名字。然后使用Element(“Subcat”)
而不是Elements(“Subcat”)
,这意味着您只得到给定“Cat”中的第一个“Subcat”,而不是全部。