使用LINQ从属性元素返回xml子元素

时间:2018-05-26 15:24:36

标签: c# xml linq

我有以下XML,我试图根据父类的属性提取子类别的值,并将它们放在组合框中。

XML

enter image description here

问题是在我运行此代码(下面)后,它只返回第一个元素值(在本例中为Major)。我有什么明显的遗失吗?

班级

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;
        }

并使用它进入组合框

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;

任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

foreach循环中,在string Cate = e.Element("Subcat").Value行中,您只选择 第一个元素。您可以尝试将循环更改为 (XElement e in Subcat.Elements()),它将遍历所有子元素。 之后,将循环体改为querylist.Add(e.Value);

完整代码:

foreach (XElement e in Subcat.Elements())
    querylist.Add(e.Value);