Стартовая страница › Форумы › Разработка и интеграция › Разбираюсь с XML
- В этой теме 45 ответов, 3 участника, последнее обновление 8 лет, 3 месяца назад сделано
Romiros.
-
АвторЗаписи
-
26.05.2018 в 21:24 #9509
manjey73УчастникВот CmdGroups может не быть вообще и изначально нет Telegram
26.05.2018 в 21:44 #9510Romiros
УчастникА так это не важно. Я думал у Val или Telegram меняются свойства.
Я Вам пример бросил, там изначально нет телеграм. Они добавляются при нажатии на вторую кнопку уже в считаю конфигурацию из файла. Я просто не пойму зачем ещё ICollection. Может из Вашего примера станет понятно.26.05.2018 в 22:52 #9512
manjey73Участникя с ICollection по другому поводу разбираюсь, чтобы читать в списки все атрибуты сразу, без указания в коде имен атрибутов. С другой стороны если десериализация будет проходить нормально, то переменные достаточно в классе будет описать я думаю. Надо просто попробовать и так и так и посмотреть что будет потом удобнее запихивать в логику драйвера.
27.05.2018 в 09:33 #9514Romiros
УчастникНаверное можно в самом классе конфигурации реализовать метод построения такого списка и вызывать его при инициализации тегов.
27.05.2018 в 10:42 #9515
manjey73УчастникВот только с MBus этот фокус не пройдет из-за разного количества переменных от приборов. И это я еще не нарывался на приборы с расширенными типами переменных и со строковыми данными…
По этому там больше списки подходят или массивы без описания в классах..-
Ответ изменён 8 лет, 3 месяца назад пользователем
manjey73.
27.05.2018 в 12:40 #9518Romiros
УчастникПочему не прокатит? Количество переменных не имеет никакого значения.
Они и так хранятся в коллекциях List и нормально сериализуется.28.05.2018 в 09:04 #9521
manjey73УчастникПока смотрю ваш вариант.
Как избавиться от атрибутов с данными http://www.w3.org/2001/XMLSchema-instance
xmlns:xsi и xmlns:xsd ?Ну у вас еще все текстом, но в атрибуты превратить думаю не проблема.
Так же закоментировал добавление cmdGroup и при этом она все равно была создана с пустым атрибутом xsi:nil (почему не null ? )
Попробую поработать над этим вариантом, но кажется без разделения классов избавиться от неиспользуемых групп не получится, что-то мне кажется.
-
Ответ изменён 8 лет, 3 месяца назад пользователем
manjey73.
28.05.2018 в 11:08 #9524Romiros
УчастникЗачем Вам xml файл разбирать? Какая разница атрибуты или нет? У Вас есть класс конфигурации, работайте с ним, xml просто это дело хранит. Как он это делает, не важно.
28.05.2018 в 11:35 #9525
manjey73УчастникИногда полезно для явного обращения к тем или иным данным файла.
Я пока не определился что и как, только разбираюсь с этим вопросом.
Ну и в некотором роде сделать однотипное решение а не только для себя, понять какой вариант мне больше понравится и с каким будет работать удобнее в рамках Scada системы.28.05.2018 в 11:59 #9526Romiros
УчастникЕсли делать через сериализацию, то про файл можно забыть, он по сути как хранилище. Можно даже не xml а бинарник. Если же Вы хотите работать с файлом, то лучше наверное ручками его собирать. Хотя как по мне проще и быстрее обратиться к свойству класса, чем к атрибуту.
28.05.2018 в 15:32 #9527
manjey73УчастникНапример для смены одной единственной переменной так же использовать сериализацию всех и вся ?, а то, что я задам в xml руками некоторые параметры, как быть с ними ?
А задавать придется, например параметр range, прописывать указанный производителем, так как он не фигурирует в посылке данных от слова совсем…
Можно конечно редактировать в UI драйвера, и тем самым выполнить сериализацию
Надо хранить полный образ файла, хотя он и так будет…В общем надо в разных вариантах попробовать.
кстати я научился читать все атрибуты не занимаясь разбором их имен и их количества, сразу коллекцией в список…
28.05.2018 в 17:45 #9528
manjey73УчастникНе могу получить доступ к переменной после load.
private void btnLoad_Click(object sender, EventArgs e) { //Загрузка всей конфигурации и вывод параметров XmlSerializer xmlSerializer = new XmlSerializer(typeof(DevTemplate)); using (FileStream fs = new FileStream("mbus.xml", FileMode.Open)) { devTemlate = (DevTemplate)xmlSerializer.Deserialize(fs); fs.Close(); } Console.WriteLine(sndGroup.SndName); }И получаю ошибку System.NullReferenceException: «Ссылка на объект не указывает на экземпляр объекта.»
28.05.2018 в 19:16 #9531Romiros
УчастникВы ничего не меняли? У меня работает тот же код, что и у Вас.
28.05.2018 в 19:20 #9532Romiros
УчастникУ вас не создан или DevTemplate или SndGroup либо SndName. Проверьте пожалуйста.
28.05.2018 в 22:04 #9542
manjey73УчастникВроде ничего не менял, Сперва ессно я нажал Без Telegram, в файл записались SndGroup и CmdGroup, потом делаю чтение с выводом в консоль и такая ошибка
-
Ответ изменён 8 лет, 3 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.