Вам определенно нужно иметь в виду разделение модели и вида и внешнее представление модели.В зависимости от того, насколько велик ваш фактический XML и какой вид API вам удобнее, вы можете использовать несколько совершенно разных способов чтения XML и превращения его в реальные объекты, которые затем будут служить моделью для вашего пользовательского интерфейса.Просто важно помнить об этом разделении.
Я буду предполагать, что ваш XML - это фактические данные от некоторой другой обработки - это означает, что будет много тегов Project, с большим количеством тегов Message и этим битовым полем.интервалы отличаются от сообщения к сообщению.Если это предположение неверно и диапазоны битовых полей фиксированы либо для всего приложения, либо для всех сообщений в одном большом файле, тогда вы можете сэкономить время и пространство.
Таким образом, при условии, что все изменчиво, самый быстрый способ получитьЗначения из тегов могут быть просто для создания XPathDocumen и выбора XPath, который вы можете сохранить в виде строки или даже в конфигурации.Например, это даст вам все теги Value (теперь они называются узлами)
//Project/Message/BitField/Value
, и, поскольку объекты для узлов имеют указатели Parent, вы можете собирать все значения, которые совместно используют Parent (в список или массив), а затем сделатьобъект для родителя (BitField), сохраните его и убедитесь, что у него есть указатель Parent из XmlNode.После того, как у вас есть все объекты BitField, вы можете так же отсканировать их, чтобы сгруппировать их по родителям (Message) и снова получить Project-s.Это всего лишь один из способов, вы можете использовать более короткий XPath, чтобы начать собирать данные из BitField и самостоятельно захватывать их дочерние элементы.
Вы также можете создать несколько простых классов, которые дословно представляют ваши теги XML (по одному элементу данных для каждогополе, один класс для каждого тега) и поместите атрибуты для XmlSerialization на затем.Это займет несколько попыток, чтобы получить правильные имена, но одна у вас есть, вы сможете просто "десериализовать" весь файл с помощью вызова функции и получить массив массивов или массивов :-) из .NET.
Если ваши файлы очень, очень большие, то вам, вероятно, придется использовать XmlTextReader и сканировать файл сверху вниз - точная обратная выборка XPath (XmlTextReader - самый легкий способ анализа, не создающий лишних тоновобъект, но вы должны повторить его в несколько взглядов и всегда "ходить" от родителя к ребенку, поскольку он односторонний).
В отношении пользовательского интерфейса, если у вас есть время немного поэкспериментировать, возможно, стоитпытаясь создать ограничивающий прямоугольник, содержащий 3 поля со списком и одно текстовое поле, а затем список из них - так, чтобы у вас было больше гибкости, т.е. вам не нужно соответствовать механике сетки.
Да, и еслиу вас есть какое-либо влияние на формат XML, попробуйте заставить ppl всегда помещать это значение в тег значения, даже если он всего один.Файл XML будет немного длиннее, но ваша обработка будет упрощена.