Я пытаюсь получить данные XML, используя XDocument
и Xelement
в C#
. Я использую IEnumerable<XElement>
для перебора всех элементов, которые я хочу получить. Моя проблема в том, что IEnumerable<XElement>
извлекает одни и те же данные много раз, и когда я использую цикл foreach
, он зацикливается больше, чем количество элементов в моем XML-файле. Это приносит то же самое в каждом цикле. Любые предложения?
Мой XML-файл:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SYSTEM SelectedConfiguration = "5840-0000-0001">
<Configuration Name = "5840-0000-0001">
<Users>
<User>
<Name>Lebron</Name>
<Surname>James</Surname>
<Adress>asdfgh</Adress>
<Phone>1234</Phone>
<Gender>Male</Gender>
<Country>USA</Country>
</User>
<User>
<Name>Kevin</Name>
<Surname>Durand</Surname>
<Adress>asdfghasdfgh</Adress>
<Phone>4567</Phone>
<Gender>Male</Gender>
<Country>USA</Country>
</User>
<User>
<Name>Stephen</Name>
<Surname>Curry</Surname>
<Adress>zxcv</Adress>
<Phone>1267</Phone>
<Gender>Male</Gender>
<Country>USA</Country>
</User>
</Users>
</Configuration>
</SYSTEM>
Мой код:
XDocument devices = XDocument.Load(Application.StartupPath + "\\Users.xml");
XElement conf = devices.Root.Element("Configuration");
/*
IEnumerable<XElement> childElements =
from el in conf.Element("Instruments").Elements("Instrument")
select el;
*/
IEnumerable<XElement> childElements = conf.Element("Users").Elements("User");
int counter = childElements.Count();
foreach (XElement el in childElements)
{
DataGridViewRow row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
row.Cells[0].Value = el.Element("Name").Value.ToString();
row.Cells[1].Value = el.Element("Surname").Value.ToString();
row.Cells[2].Value = el.Element("Adress").Value.ToString();
dataGridView1.Rows.Add(row);
// if (counter-- <= 1)
// return;
}
Полученные результаты:
Нажмите здесь, чтобы увидеть изображение
Нажмите здесь, чтобы увидеть изображение 2
Нажмите здесь, чтобы увидеть изображение 3
Как видно на изображениях, существует более одного Леброна Джеймса или Кевина Дюранда, и foreach
просматривает каждую комбинацию этих узлов, как показано наИзображение 3.
Редактировать 1:
Программа возвращается к строке IEnumerable<XElement> childElements = conf.Element("Users").Elements("User");
несколько раз. Счетчик получает 3 снова и снова.