Какая команда в XDocument аналогична строке из xmlDocument: pictureBoxItem1.ImageLocation = xmlDoc.DocumentElement.ChildNodes[comboBox1.SelectedIndex].ChildNodes[3].InnerText;
Картина в общем: в combobox загружается поле Имя каждого элемента.С каждым выбором элемента в combox`e в элементы picturebox, textbox подставляются соответствующие строки выбранного элемента.И, не по теме, возможно ли сделать присвоение атрибута "id" автоматически? Пример кода XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Champions>
<Champion id="26">
<NameC>NameHere</NameC>
<ImageC>ImageLocation</ImageC>
<BuildC>BuildHere</BuildC>
<item1>ImageHere</item1>
....
</Champion>
</Champions>
Вот код заполнения combobox
void FillComboBox()
{
comboBox1.Items.Clear();
var chmp = from Champion in
XDocument.Load(Path.Combine(Environment.CurrentDirectory, "champions.xml")).Descendants("Champion")
select new Champion
{
NameC = Champion.Element("NameC").Value.ToString()
};
foreach (var Champion in chmp)
{
comboBox1.Items.Add(Champion.NameC);
}
Идеальный вариант - создать нормальный модельный класс(ы), десериализовать XML в объекты и работать уже с объектами. Но если хочется извращений с голым XML, можно и так =)
XDocument
и сопутствующие классы, в отличие от XmlDocument
, возвращают IEnumerable<T>
для коллекций вложенных элементов, LiNQ все таки. Поэтому прямого обращения по индексу там не предусмотрено. Можно выкрутиться путём материализации IEnumerable<T>
в List<T>
, но учтите, что в общем случае нет гарантии постоянного соответствия индексов и элементов.
Теперь о том как такого "монстра" сделать. Простой пример поиска элемента по id
на примере вашего XML:
var doc = XDocument.Parse("<Champions>"+
"<Champion id=\"25\">"+
"<NameC>NameHere</NameC>"+
"<ImageC>ImageLocation</ImageC>"+
"<BuildC>BuildHere</BuildC>"+
"<item1>ImageHere</item1>"+
"</Champion>"+
"</Champions>");
Console.Write(doc.Root.Descendants("Champion")
.FirstOrDefault(e => e.Attribute("id")?.Value == "26")
?.Element("ImageC")?.Value);
Для обращения по индексу, материализуем перечисление:
Console.Write(doc.Root.Descendants("Champion")
.ToList()[0]//создаем List из перечисления и обращаемся по индексу
.Element("ImageC")?.Value);
Минус последнего варианта - возможность получить исключение при обращение к несуществующему индексу, первый вариант лишен такого недостатка.
Еще раз повторю: да это можно сделать, но так делать не нужно. Лучше потратить немного времени на модельный класс(ы), настроить XML-сериализацию и работать в UI с коллекцией нормальных объектов и штатными биндингами.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Грубо говоря, есть основная запись в БД (Processing), есть коллекция - к каким темам относится основная запись (EmailTheme)Для этого написаны следующие...
Пишу я REST клиента и хочется мне его тестами покрыть, а зависеть от внешних сервисов не хочетсяREST API сервиса, к которому подключаться я знаю,...
Сделал авторизацию в webbrowser, но как выйти из учетки вк? Побывал через https://loginvk