Извлекать данные из xml-файла в текстовое поле при выборе элемента из выпадающего списка. Как этого можно достичь?

#c# #xml #winforms #combobox

#c# #xml #winforms #выпадающий список

Вопрос:

XML-файл:

 <?xml version="1.0" encoding="UTF-8"?>
<employees>
  <employee>
    <name>John</name>
    <salary>29000</salary>  
  </employee>

  <employee>
    <name>Harry</name>
    <salary>35000</salary>  
  </employee>
</employees>
  

Здесь я заполняю имена сотрудников из XML-файла в выпадающем списке

 XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNodeList colorList = doc.SelectNodes("employees/employee/name");
foreach (XmlNode Name in colorList)
{
    FeedComboBox.Items.Add(Name.InnerText);
}
  

Чего я пытаюсь добиться, так это того, что если я выберу Джона из списка, мне нужно извлечь значение зарплаты Джона (29000) из XML-файла и отобразить его в текстовом поле

Ответ №1:

Это должно сработать

 var root = XElement.Parse(stringxml);
var empName = "John";  // This will be the string you select from combobox
var query = root
        .XPathSelectElements(string.Format("/employee[name='{0}']", empName))
        .Select(et => new
        {
            salary = (string)et.Element("salary"),
        });

var results = query.ToList();
TextBox.Text = results[0].salary;  // Set the Salary to the textbox
  

Ответ №2:

Вместо этого просто выберите employee элемент, и вы сможете получить доступ к его дочерним элементам через индексатор ( [] ):

 foreach(XmlNode employee in doc.SelectNodes("employees/employee"))
{
    var name = employee["name"].InnerText;
    var salary = employee["salary"].InnerText;

    FeedComboBox.Items.Add($"{name} ({salary})");
}
  

Комментарии:

1. Это не соответствует моему требованию. В принципе, у меня есть строка с надписью ‘Harry’, поэтому я хочу извлечь зарплату (35000) сотрудника Harry из xml-файла и отобразить в текстовом поле.