Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 12:45   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию XSD - схема в виде дерева

Добрый день. Нужно представить xsd - схему в виде дерева, как показано на рисунке.
Есть идеи?
Изображения
Тип файла: jpg дерево.jpg (41.2 Кб, 161 просмотров)
m9yt вне форума Ответить с цитированием
Старый 29.04.2013, 19:30   #2
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Неужели ни у кого нет соображений, как заполнить обычный TreeView данными из схемы?
m9yt вне форума Ответить с цитированием
Старый 30.04.2013, 15:54   #3
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Код:
private void createTree_Click(object sender, EventArgs e)
        {
            TraverseSOM(xsdPath.Text);
        }
        private static XmlSchema ReadAndCompileSchema(string fileName)
        {
            XmlTextReader tr = new XmlTextReader(fileName, new NameTable());
            XmlSchema schema = XmlSchema.Read(tr,
                   new ValidationEventHandler(ValidationCallbackOne));
            tr.Close();
            XmlSchemaSet xset = new XmlSchemaSet();
            xset.Add(schema);
            xset.Compile();
            return schema;
        }
        private static void ValidationCallbackOne(object sender, ValidationEventArgs args)
        {
            Console.WriteLine("Exception Severity: " + args.Severity);
            Console.WriteLine(args.Message);
        }
        private void TraverseSOM(string xsfFilename)
        {
            XmlSchema custSchema = ReadAndCompileSchema(xsfFilename);
            foreach (XmlSchemaElement elem in custSchema.Elements.Values)
            {
                TreeNode rootNode = ProcessElement(elem);
                treeView.Nodes.Add(rootNode);
            }
        }
        private TreeNode ProcessElement(XmlSchemaElement element)
        {
            TreeNode node = new TreeNode(element.Name);
            XmlSchemaComplexType ct = element.ElementSchemaType as XmlSchemaComplexType;
            if (ct != null)
            {
                // Обработка вложенных элементов
                XmlSchemaSequence sequence =
                    ct.ContentTypeParticle as XmlSchemaSequence;
                if (sequence != null)
                {
                    for (int i = 0; i < sequence.Items.Count; ++i)
                    {
                        XmlSchemaElement child =
                            sequence.Items[i] as XmlSchemaElement;
                        if (child != null)
                        {
                            TreeNode childNode = ProcessElement(child);
                            node.Nodes.Add(childNode);
                        }
                    }
                }
                // Обработка атрибутов
                foreach (DictionaryEntry obj in ct.AttributeUses)
                {
                    node.Nodes.Add((obj.Value as XmlSchemaAttribute).Name);
                }
            }
            return node;
        }
m9yt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структура в dbgrideh в виде дерева vladislav_m БД в Delphi 12 27.04.2012 23:55
Маркированный список в виде дерева c JS! bulat786 JavaScript, Ajax 1 28.02.2012 16:27
XSD схема языка ODL Ar.Van Помощь студентам 1 25.01.2012 00:19
Таблица в виде дерева НП... PHP 4 15.06.2010 15:12
Меню в виде дерева pu4koff JavaScript, Ajax 7 16.10.2007 11:24