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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 13:17   #1
Pon4ik
 
Регистрация: 18.05.2012
Сообщений: 3
По умолчанию Построить treeView из XML

Имеется такой XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
<CL name="group1">
<CL name="1" />
<CL name="2" />
</CL>
<CL name="group2">
<CL name="3" />
<CL name="4" />
</CL>
<CL name="group3">
<CL name="5" />
<CL name="6" />
</CL>
</root>

Требуется в treeView построить дерево, где group1, group2, group3 - будут Parent, а содержимое атрибутов "name" их Chaild соответственно.

Смог выводить только Родительские элементы, а дальше загвоздка(((

OpenFileDialog OpenFile = new OpenFileDialog();
OpenFile.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (OpenFile.ShowDialog() == System.Windows.Forms.DialogResult.O K)
{
path_xml_base = OpenFile.FileName;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path_xml_base);

foreach (XmlNode item in xmlDoc.DocumentElement.SelectNodes( "/root/CL"))
{
treeView1.Nodes.Add((item as XmlNode).Attributes["name"].Value);

}
}


Мучаюсь уже второй день, буду крайне благодарен тому кто напишет валидный код. Спасибо.
Pon4ik вне форума Ответить с цитированием
Старый 18.05.2012, 13:21   #2
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Ну так а кто будет выводить дочерние, пушкин АС?
=master= вне форума Ответить с цитированием
Старый 18.05.2012, 13:27   #3
Pon4ik
 
Регистрация: 18.05.2012
Сообщений: 3
По умолчанию

Вот я и прошу помощи
Pon4ik вне форума Ответить с цитированием
Старый 18.05.2012, 13:32   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Код за вас написать? а самому неохота?

Собственно у вас он почти весь есть. осталось малость - вытянуть дочерние, и вставить тем-же макаром.
Дочерние находятся в родителях, что логично..
=master= вне форума Ответить с цитированием
Старый 18.05.2012, 13:36   #5
Pon4ik
 
Регистрация: 18.05.2012
Сообщений: 3
По умолчанию

Я все описал в первом посте. Именно вытянуть Дочек у меня и не получается, пришел за помощью на форум. Если не можешь, или не хочешь помочь, то просто пройди мимо, зачем флудить?
Pon4ik вне форума Ответить с цитированием
Старый 18.05.2012, 14:05   #6
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Надо просто посмотреть на свойства родительских нодов, 1 сек времени.
=master= вне форума Ответить с цитированием
Старый 18.05.2012, 18:22   #7
nats
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 65
По умолчанию

Держи
PHP код:
                foreach (XmlNode item in xmlDoc.DocumentElement.SelectNodes("/root/CL"))
                {
                    
treeView1.Nodes.Add((item as XmlNode).Attributes["name"].Value);
                    foreach (
XmlNode item2 in item.ChildNodes)
                        
treeView1.Nodes[treeView1.Nodes.Count 1].Nodes.Add((item2 as XmlNode).Attributes[0].Value);

                } 
nats вне форума Ответить с цитированием
Старый 18.05.2012, 19:07   #8
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Вот молодец Nats, помог человеку. А то я уже выбирал время, чтобы прислать что-то подобное.
Осмелюсь добавить совет.
Это частный случай, когда дерево имеет только 2 уровня. А для общего случая, когда степень вложенности ветвей заранее неизвестна, полезно сделать функцию для строительства ветви, которая вызывалась бы рекурсивно, что-то типа:
private void BranchCollect(Node root) {...}
В первый раз в качестве root в неё вводится корень дерева.
Она в цикле присоединяет к root узлы первого уровня:
Node newNode = new Node();
...
root.Nodes.Add(newNode);
а если среди них встретился корень ответвления, то "отвлекается" на сборку этой ветви, вызывая саму себя:
this.BranchCollect(newNode); // Рекурсия
Здесь один из новых узлов выступает в роли корня. Пусть рекурсивный вызов происходит на каждом узле - просто если нет дочерних узлов, то ветвь не создаётся (а у Вас есть признак корня ветви, так что можно рекурсию сделать условной, но это ускорит сборку дерева только теоретически). И так далее, по всему дереву, сколько бы не было ветвей.
Гаврилов вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение TreeView из XML maximumtf2 Общие вопросы Delphi 8 11.04.2012 00:30
TreeView сохранить в xml использую linq iukash C# (си шарп) 3 24.07.2011 16:45
Проблема при загрузке файла XML в TreeView artemavd Общие вопросы Delphi 1 20.06.2010 15:39
Добавление узлов в XML в Delphi, исользуя Treeview Анастасия999 Помощь студентам 0 08.05.2010 10:05
вывод xml данных из TreeView в webbrowser Dr.XxX Общие вопросы Delphi 1 10.10.2008 12:06