You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从XML提取唯一Instructor ID填充ComboBox并存储选中信息?

解决XML中讲师ID去重及选中后获取信息的问题

问题背景

现有结构如下的XML文件:

<Sim>
  <Test ID="1" Description="test1" Date="17/01/2023">
    <Instructor Num="1">
      <Name>instructor1</Name>
      <Surname></Surname>
      <Rank></Rank>
    </Instructor>
  </Test>
  <Test ID="2" Description="test2" Date="16/01/2023">
    <Instructor Num="22">
      <Name>instructor22</Name>
      <Surname></Surname>
      <Rank></Rank>
    </Instructor>
  </Test>
</Sim>

当前代码能获取所有讲师ID,但存在重复(同一讲师对应多个Test时会重复显示),同时需要选中ComboBox选项后,获取对应讲师的Name、Surname、Rank存入临时变量:

XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList insList = doc.SelectNodes("Sim/Test/Instructor");
foreach (XmlNode xn in insList)
   cBox_ins.Items.Add(xn.Attributes["Num"].Value);

解决方案

1. 定义讲师实体类

创建一个实体类封装讲师的所有信息,方便后续数据管理:

public class Instructor
{
    public string Num { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Rank { get; set; }
}

2. 读取XML并去重,绑定到ComboBox

使用LINQ实现去重,同时将完整的讲师对象存入集合,绑定到ComboBox:

XmlDocument doc = new XmlDocument();
doc.Load(path);

// 提取讲师信息并按Num去重
var instructors = doc.SelectNodes("Sim/Test/Instructor")
    .Cast<XmlNode>()
    .Select(xn => new Instructor
    {
        Num = xn.Attributes["Num"].Value,
        Name = xn.SelectSingleNode("Name").InnerText,
        Surname = xn.SelectSingleNode("Surname").InnerText,
        Rank = xn.SelectSingleNode("Rank").InnerText
    })
    .GroupBy(ins => ins.Num)
    .Select(g => g.First())
    .ToList();

// 配置ComboBox的显示与数据源
cBox_ins.DisplayMember = "Num";
cBox_ins.ValueMember = "Num";
cBox_ins.DataSource = instructors;

3. 选中选项后获取讲师信息

给ComboBox添加SelectedIndexChanged事件,在事件中提取选中讲师的信息:

private void cBox_ins_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cBox_ins.SelectedItem is Instructor selectedIns)
    {
        // 将信息存入临时变量
        string tempName = selectedIns.Name;
        string tempSurname = selectedIns.Surname;
        string tempRank = selectedIns.Rank;
        
        // 可根据需求使用这些变量,比如赋值到其他控件或进行业务处理
    }
}

关键说明

  • 实体类的使用避免了零散的字符串操作,代码更易维护
  • 通过GroupBy按Num去重,确保每个讲师ID仅显示一次
  • 绑定完整数据源后,选中时直接获取讲师对象,无需重复查询XML

内容的提问来源于stack exchange,提问作者dositelu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:20:53