Какая команда в 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 с коллекцией нормальных объектов и штатными биндингами.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей