Есть некоторый XML документ
<?xml version="1.0" encoding="utf-8"?>
<specifications>
<s name="100">
<sg>014</sg>
<time>10</time>
<sg>016</sg>
<time>11</time>
</s>
<s name="200">
<sg>015</sg>
<time>12</time>
<sg>017</sg>
<time>13</time>
</s>
</specifications>
Мне необходимо вывести 3 значения из этого файла в 3 ListBox-a
Пример вывода: ListBox1 = name, ListBox2 = sg, ListBox3 = time.
Я смог вывести документ только по имени в первый ListBox
XmlDocument xDoc = new XmlDocument();
xDoc.Load("Specification.xml");
XmlElement xRoot = xDoc.DocumentElement;
foreach (XmlElement xnode in xRoot)
{
XmlNode attr = xnode.Attributes.GetNamedItem("name");
listBox1.Items.Add(attr.Value);
}
Я прошелся по учебникам и нашел данное решение:
public List<string> ListTest1 { get; } = new List<string>();
public List<string> ListTest2 { get; } = new List<string>();
private void reff()
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("Specification.xml");
XmlElement xRoot = xDoc.DocumentElement;
foreach (XmlElement xnode in xRoot)
{
XmlNode attr = xnode.Attributes.GetNamedItem("name");
listBox1.Items.Add(attr.Value);
foreach (XmlNode childnode in xnode.ChildNodes)
{
switch (attr.Value)
{
case "100":
ListTest1.Add(childnode.InnerText);
break;
case "200":
ListTest2.Add(childnode.InnerText);
break;
}
}
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox comboBox = (ListBox)sender;
string selectedValue = (string)listBox1.SelectedItem;
switch (selectedValue)
{
case "100":
listBox2.DataSource = ListTest1;
listBox3.DataSource = ListTest1;
break;
case "200":
listBox2.DataSource = ListTest2;
listBox3.DataSource = ListTest2;
break;
}
}
Но оно выводит только два параметра и как вывести третье я не нашел(третье выводит вместе со вторым). И к тому же, файл XML в последствии планируется пополняться (ПРИМЕР: s name="300" и так далее). А в этом примере используется Константа в "case" и этот вариант совсем не подходит.
Вот как должно выглядеть(кроме цифры 11, что должна быть в ListBox3): 1) Начальный запуск - 2) Выбор первой спецификации - 3) Выбор 2 спецификации
Time везде одинаковый только на картинках, так как они были сделаны до правильного написания.
Подскажите пожалуйста как решить данный вопрос. Заранее спасибо
Для сбора данных создадим такой класс
public class Spec
{
public List<string> Ss { get; } = new List<string>();
public List<string> Sgs { get; } = new List<string>();
public List<string> Times { get; } = new List<string>();
}
Для парсинга xml создадим такой класс
public class XmlService
{
public static Spec GetSpec(string pathToFileXml)
{
if (string.IsNullOrEmpty(pathToFileXml))
throw new ArgumentException("Требуется путь к файлу!", nameof(pathToFileXml));
if (!File.Exists(pathToFileXml))
throw new ArgumentException("Такой файл не существует!", nameof(pathToFileXml));
var result = new Spec();
XDocument doc = XDocument.Load(pathToFileXml);
foreach (XElement item in doc.Descendants("specifications").Elements("s"))
{
var val = item.Attribute("name").Value;
result.Ss.Add(val);
}
foreach (XElement item in doc.Descendants("specifications").Elements("s").Elements("sg"))
{
var val = item.Value;
result.Sgs.Add(val);
}
foreach (XElement item in doc.Descendants("specifications").Elements("s").Elements("time"))
{
var val = item.Value;
result.Times.Add(val);
}
return result;
}
}
Код формы такой
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.Load += FormMain_Load;
}
private void FormMain_Load(object sender, EventArgs e)
{
var spec = XmlService.GetSpec("specs.xml");
_listBoxSgs.DataSource = spec.Sgs;
_listBoxSs.DataSource = spec.Ss;
_listBoxTimes.DataSource = spec.Times;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
У кого либо может быть есть работающий код на C# (простыми конструкциями сделанный) с двухсторонней сортировкой выбором (Double selection sort)? Можете...
Я создал простой сайт на aspnet framework, в котором есть стандартная проверка подлинности пользователей, то есть регистрация, но я добавил в нее...
В главной форме проинициализирована переменная отвечающая за графику g = thisCreateGraphics()