С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
8 / 8 / 13
Регистрация: 03.02.2013
Сообщений: 159

Чтение настроек из файла XML

11.03.2016, 11:55. Показов 1487. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте. Проблема вот такая: надо правильно считать настройки из XML, т.е.
есть Project а в нём 1 Settings и куча Cooperative.

Выбираем Файл->Открыть, выбираем XML Документ, открываем


Функция сохранения файла

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
    {
      Stream myStream;
      SaveFileDialog saveFileDialog1 = new SaveFileDialog();
 
      saveFileDialog1.Filter = "xml files (*.xml)|*.xml";
 
      saveFileDialog1.FilterIndex = 0;
      saveFileDialog1.RestoreDirectory = true;
 
      if (saveFileDialog1.ShowDialog() == DialogResult.OK)
      {
        if ((myStream = saveFileDialog1.OpenFile()) != null)
        {
          // Code to write the stream goes here.
 
          // Файл->Сохранить
          XDocument doc = new XDocument();
 
          XElement xmlProject = new XElement("project");
          doc.Add(xmlProject);
 
          //
          //
 
          XElement xmlSettings = new XElement("settings");
 
          for (int i = 0; i < parrentDebtor.getNumberAttributs(); i++)
          {
            xmlSettings.Add(new XAttribute(parrentDebtor.getAttributeNameENG(i), parrentDebtor.getAttribute(i)));
          }
 
          xmlProject.Add(xmlSettings);
 
          //
          //
 
          for (int i = 0; i < p.getNumberCooperative(); i++)
          {// Проходим по всем кооперативам проекта
            Cooperative coop = p.getCooperative(i);
            XElement xmlCooperative = new XElement("cooperative");
            xmlCooperative.Add(new XAttribute("name", coop.Name));
 
            for (int j = 0; j < p.getCooperative(i).getNumberDebtor(); j++)
            {// Проходим по всем должникам кооператива
              Debtor deb = coop.getDebtor(j);
              XElement xmlDebtor = new XElement("debtor");
              for (int a = 0; a < deb.getNumberAttributs(); a++)
              {// Проходим по атрибутам должника
                string name = deb.getAttributeNameENG(a);
                string value = deb.getAttribute(a);
                xmlDebtor.Add(new XAttribute(name, value));
              }
              xmlCooperative.Add(xmlDebtor);
            }
            xmlProject.Add(xmlCooperative);
          }
 
          //сохраняем наш документ
          doc.Save(myStream);
 
          myStream.Close();
        }
      }
    }
Сохранённый XML файл с помощью функции

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<project>
  <settings name="1" address="0" number="0" debt="0" mailNotification="0" plaint="0" dateOfMeeting="0" lawCourt="0" executiveProductio="0" comment="0" />
  <cooperative name="ГК Суд">
    <debtor name="Кильдюшов Олег Сергеевич" address="12" number="1" debt="1000" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="====" />
    <debtor name="Гусь" address="Россия" number="35" debt="0" mailNotification="-" plaint="-" dateOfMeeting="-" lawCourt="-" executiveProductio="-" comment="Гусь обыкновенный&#xD;&#xA;ыыы" />
  </cooperative>
  <cooperative name="Сто двенадцатый кооператив">
    <debtor name="Пенсионер Артиклус" address="1" number="2" debt="3" mailNotification="4" plaint="5" dateOfMeeting="6" lawCourt="7" executiveProductio="8" comment="9" />
    <debtor name="123" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
  </cooperative>
  <cooperative name="ГК Уляляшка">
    <debtor name="1" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
    <debtor name="2" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
  </cooperative>
  <cooperative name="ГК Октябрьский">
    <debtor name="1" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
    <debtor name="2" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
    <debtor name="3" address="" number="" debt="" mailNotification="" plaint="" dateOfMeeting="" lawCourt="" executiveProductio="" comment="" />
  </cooperative>
</project>
Функция открытия XML файла

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
private void openFile(object sender, EventArgs e)
    {
      p.Clear();
 
      Stream myStream = null;
      OpenFileDialog openFileDialog1 = new OpenFileDialog();
 
      openFileDialog1.InitialDirectory = "";
      openFileDialog1.Filter = "xml files (*.xml)|*.xml";
 
      openFileDialog1.FilterIndex = 0;
      openFileDialog1.RestoreDirectory = true;
 
 
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        try
        {
          if ((myStream = openFileDialog1.OpenFile()) != null)
          {
 
            using (myStream)
            {
 
              XDocument doc = XDocument.Load(myStream);
              /*
              foreach (XElement settings in doc.Root.Elements())
              {
                for (int i = 0; i < parrentDebtor.getNumberAttributs(); i++)   // Проходим по атрибутам
                {
                  string sName = parrentDebtor.getAttributeNameENG(i); // списываем название атрибута в строку
                  string sValue = settings.Attribute(sName).Value;     // списываем значение атрибута в строку
                  parrentDebtor.setAttribute(i, sValue);
                }
              }
              */
              foreach (XElement cooperativ in doc.Root.Elements())     // Проходим по кооперативам текущего документа
              {
                string str = cooperativ.Attribute("name").Value;       // Выбираем имя кооператива из файла
                Cooperative coop = new Cooperative(str);               // Создаём новый чистый кооператив с именем
 
                foreach (XElement debtor in cooperativ.Elements())     // Проходим по всем Должникам текущего кооператива
                {
                  //str = debtor.Attribute("name").Value;
                  Debtor deb = new Debtor();                           // Создаём нового Должника
                  deb.setAttribute(0, debtor.Attribute("name").Value); // Задаём ему имя из файла
 
                  for (int i = 0; i < deb.getNumberAttributs(); i++)   // Проходим по атрибутам
                  {
                    string sName = deb.getAttributeNameENG(i);         // списываем название атрибута в строку
                    string sValue = debtor.Attribute(sName).Value;     // списываем значение атрибута в строку
                    deb.setAttribute(i, sValue);                       // устанавливаем данный атрибут в должника
                  }
 
                  coop.addDebtor(deb);                                 // добавляем должника в кооператив
                }
                p.addCooperative(coop);                                // добавляем кооператив в проект
              }
              //doc.Save(fileName);
              UpdateTreeView();
 
            }
            this.Text = openFileDialog1.FileName;
          }
        }
        catch (Exception ex)
        {
          MessageBox.Show("Ошибка: не удалось прочитать файл с диска. Оригинальная ошибка: " + ex.Message + "; Скорее всего выбранный XML файл был создан не в этой программе.");
        }
      }
    }
Повторюсь, проблема в том, что надо правильно считать настройки из XML т.е.
XML
1
<settings name="1" address="0" number="0" debt="0" mailNotification="0" plaint="0" dateOfMeeting="0" lawCourt="0" executiveProductio="0" comment="0" />
Есть какие нибудь подсказки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2016, 11:55
Ответы с готовыми решениями:

Чтение XML файла
Здравствуйте! Подскажите пожалуйста, почему у меня получается пустое значение поля id (переменная f)? &lt;?xml...

Чтение xml файла
использую код что бы создать xml файл XElement element = new XElement(&quot;XMLFileName&quot;, new...

Чтение XML файла
Необходимо прочитать XML файл следующего вида: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lt;entries&gt; &lt;entry...

1
22 / 22 / 13
Регистрация: 11.08.2015
Сообщений: 69
11.03.2016, 12:10
Вот тебе пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System.Linq;
using System.Xml.Linq;
using MKP.GosInsp.Structure;
 
namespace MKP.GosInsp
{
    sealed class SomethingDo
    {
        public Cycle[] Cycles;
        public Discipline[] Disciplines;
        public Pract[] Practs;
        public Title Title;         
        public SomethingDo(string filename)
        {
            ReadFile(filename);
        }
 
        void ReadFile(string filename)
        {  
            var xml = XDocument.Load(filename);
            if (xml == null)
                return;
            var docum = (xml.Descendants("Документ").Select(var => new
            {
                plan = var.Descendants("План").Select(var2 => new
                {
                    #region title
                    title = var2.Descendants("Титул").Select(var3 =>
                        new Title(
                            var3.Attribute("ПоследнийШифр")?.Value,
                            var3.Attribute("ГодНачалаПодготовки")?.Value,
                            var2.Attribute("ФормаОбучения")?.Value)).First(),
                    #endregion
                    #region  Disc
                    planRows = var2.Descendants("СтрокиПлана").Select(var3 => new
                    {
                        row = var3.Descendants("Строка").Select(var4 =>
                            new Discipline(var4.Attribute("Дис")?.Value, var4.Attribute("НовЦикл")?.Value,
                                var4.Descendants("Сем").Select(var5 =>
                                    new SemestersDis(var5.Attribute("Ном")?.Value,
                                        var5.Attribute("Экз")?.Value,
                                        var5.Attribute("Зач")?.Value,
                                        var5.Attribute("ЗачО")?.Value,
                                        var5.Attribute("КП")?.Value,
                                        var5.Attribute("КР")?.Value,
                                        var5.Attribute("КонтрРаб")?.Value,
                                        var5.Attribute("Оценка")?.Value,
                                        var5.Attribute("Реф")?.Value,
                                        var5.Attribute("Эссе")?.Value,
                                        var5.Attribute("РГР")?.Value,
                                        var5.Attribute("Лек")?.Value,
                                        var5.Attribute("ИнтЛек")?.Value,
                                        var5.Attribute("Лаб")?.Value,
                                        var5.Attribute("ИнтЛаб")?.Value,
                                        var5.Attribute("Пр")?.Value,
                                        var5.Attribute("ИнтПр")?.Value,
                                        var5.Attribute("ЗЕТ")?.Value,
                                        var5.Attribute("СРС")?.Value,
                                        var5.Attribute("ЧасЭкз")?.Value)).ToArray())).ToArray()
                    }).First(),
                    #endregion
                    #region practika               
                    prk = var2.Descendants("СпецВидыРаботНов").Select(var3 => new
                    {
                        YP =
                            var3.Descendants().Select(
                                    var5 =>
                                        new Pract(var5.Attribute("Наименование")?.Value,
                                            var5.Descendants("Семестр")
                                                .Select(var4 => new SemPrac(
                                                    var4.Attribute("Ном")?.Value,
                                                    var4.Attribute("ПланНед")?.Value,
                                                    var4.Attribute("ПланЧасов")?.Value,
                                                    var4.Attribute("ПланЗЕТ")?.Value,
                                                    var4.Attribute("Зач")?.Value, var4.Attribute("ЗачО")?.Value, var4.Attribute("Экз")?.Value)).ToArray())).ToArray(),
 
                    }).First(),
                    #endregion
                    #region Cyckle
                    c =
                        var2.Descendants("Титул")
                            .Descendants("АтрибутыЦикловНов")
                            .Descendants("Цикл")
                            .Select(
                                var3 =>
                                    new Cycle(var3.Attribute("Аббревиатура")?.Value, var3.Attribute("Название")?.Value, var3.Attribute("Ном")?.Value))
                            .ToArray()
                    #endregion 
                }).First()
            })).First();
            Title = docum.plan.title;
            Disciplines = docum.plan.planRows.row;
            Practs = docum.plan.prk.YP;
            Cycles = docum.plan.c;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2016, 12:10
Помогаю со студенческими работами здесь

Чтение нестандартного xml файла
Всем привет. Есть файлик, по сути - набор строк из xml-элементов, могут быть также как пустые строки, так и строки xml-комментариев. ...

Чтение xml файла через for
Здравствуйте, как сделать так, чтобы progressbar работал по мере добавления, знаю, как сделать через for, но не знаю, как двигать...

Чтение xml файла и вывод в txtBox1
Доброго времени суток Пишу программку, необходим код для чтения xml файла, и то, что про прочли мы выводим в txtBox1 xml файл будет...

Чтение и вывод данных из XML файла
Здрасте,проблема в следующем : имеется XML документ,выглядит вот так(маленький фрагмент) &lt;Da id=&quot;1&quot;&gt; ...

Чтение XML путем перетаскивания файла в DataGridView
Добрый день. Подскажите , пожалуйста, как можно прочитать xml в datatable, перетащив мышью этот файл в datagridview. Или узнать путь к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru