Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
bartle
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 59
#1

Xml и Combobox - Delphi

27.02.2016, 19:34. Просмотров 225. Ответов 6
Метки нет (Все метки)

Всем привет!
Имеется xml файл:
XML
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
<base>
    <stantion id="1" name="Колледж Радио">
        <faculties name="Радиоэлектронное">
            <Group name="ИТР 42">
                <student name="Иванов Владимер"></student>
                <student name="Мармеладненьков Иван"></student>
                <student name="Сером Максим"></student>
            </Group>
        </faculties>
        <faculties name="Приборный">
            <Group name="МВВС 22">              
                <student name="Иванов Владимер"></student>
                <student name="Мармеладненьков Иван"></student>
                <student name="Сером Максим"></student>
            </Group>
        </faculties>
    </stantion>
    <stantion id="2" name="КНиНТ">
        <faculties name="Информационная безопасность">
            <Group name="МВВС 22">              
                <student name="Иванов Владимер"></student>
                <student name="Мармеладненьков Иван"></student>
                <student name="Сером Максим"></student>
            </Group></faculties>
        <faculties name="Математика"></faculties>
    </stantion>
    <stantion id="3" name="Исторический">
        <faculties></faculties>
    </stantion>
</base>
Этот файл записан в строку ServerResult:string;

Имеется комбобокы
Название: удалить.png
Просмотров: 20

Размер: 3.8 Кб
Вопрос в следующим. как сделать чтобы в первой комбобокс появились все институты (stantion в xml) выбирая какой-либо институт во второй комбобоксе подружилась все факультеты (faculties), выбирая во втором комбобоксе како-либо факультет, в третий чек загружались все группы этого факультета (Group в xml)

Пробовал так, получилось только с первым, дальше не знаю что делать(

Delphi
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
procedure Tmain.Button4Click(Sender: TObject);
var
  F : File;
  i, j, Size : Integer;
  S : String; //AnsiString;
  XmlDocNode, XmlNode, XmlAttr : IXMLNode;
  Od : TOpenDialog;
begin
  XMLDocument1.LoadFromXML(ServerResult);
  XMLDocument1.Active := True;
 
  Memo2.Lines.Add('--------------------------------------------------');
  Memo2.Lines.Add('Список элементов с тегом .');
  XmlDocNode := XMLDocument1.DocumentElement;
  for i := 0 to XmlDocNode.ChildNodes.Count - 1 do begin
    XmlNode := XmlDocNode.ChildNodes[i];
    if XmlNode.NodeName <> 'stantion' then Continue;
 
    Memo2.Lines.Add('--------------------');
    Memo2.Lines.Add(XmlNode.NodeName);
    //Атрибуты элемента.
    for j := 0 to XmlNode.AttributeNodes.Count - 1 do begin
      XmlAttr := XmlNode.AttributeNodes.Get(j);
      Memo2.Lines.Add('-----' + ' ' + XmlAttr.NodeName + '="' + XmlAttr.NodeValue + '"');
 
      if(XmlAttr.NodeName = 'name') then begin
        Combobox1.Items.Add(XmlAttr.NodeValue);
      end;
 
    end;
  end;
end;
Помогите пожалуйста, очень нужна такая штука, заранее спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2016, 19:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Xml и Combobox (Delphi):

Загрузить данные из XML в ComboBox - Delphi
Привет!! ребят помогите как сделать чтобы из XML в ComboBox1 данные грузились procedure TForm1.Button1Click(Sender: TObject); begin ...

Как можно менять текст в Combobox, используя другой Combobox? - Delphi
Как можно менять текст, в Combobox используя другой Combobox, т.е. Допустим, есть два Combobox: Combobox1 и Combobox2. В первом будут...

Несколько Combobox-ов. После выбора значения в одном Combobox-е, оно должно стать недоступным в других - Delphi
Доброго времени суток. У меня такая проблемка. Имеется 3 combobox'a ,содержащие названия городов, во всех трех одинаковый список. При...

TabControl, StringGrid и Combobox. Обращение к ComboBox - Delphi
Здравствуйте. Вот такое задание: Для каждого предмета в аттестате может быть: зачет, оценка или прослушан курс. Как я это сделал: (во...

Где найти мануал по парсингу XML? Как работать с XML в Delphi (в частности, TXMLDocument)? - Delphi
Всех приветствую! Раньше несколько лет работал в Матлабе, но теперь приспичило писать программу на Дельфи. Надо открывать xml-файлы,...

Вывести данные в таблицу из xml файла. - Анализ XML файла, выгружаемого программой SPU_ORB. - Delphi
Есть такой файлик с расширением .xml (из программы spy_orb) в нем много строк, но нам нужно вытащить только суммы и запихнуть в таблицу,...

6
qwertehok
1584 / 1575 / 333
Регистрация: 29.08.2013
Сообщений: 10,536
27.02.2016, 21:10 #2
нашли нужный элемент - выводите количество его Child элементов - это будут факультеты
у факультетов ищите Child - это группы
у групп - студенты

а если список не очень большой и не динамический - дергайте его сразу в StringList
0
bartle
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 59
27.02.2016, 21:23  [ТС] #3
Я запутываюсь в них(
Помогите написать цикл где вытаскиваются эти значения по одному.
0
qwertehok
1584 / 1575 / 333
Регистрация: 29.08.2013
Сообщений: 10,536
27.02.2016, 21:27 #4
bartle, помогите - это "напишите за меня"? или "я буду диктовать, а вы пишите"?

Цитата Сообщение от bartle Посмотреть сообщение
Я запутываюсь в них(
разделите задачу на этапы и решайте
0
unifikator
484 / 342 / 176
Регистрация: 29.03.2015
Сообщений: 667
28.02.2016, 09:56 #5
Поместил XML в свойство XML компонента xmldocument1 и каждый раздел увеличил.
Данные из XML в начале загружаются в первый combobox, при выборе из него - во второй и т.д.
Код:
Delphi
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
98
unit MainU;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    ComboBox1: TComboBox;
    Label2: TLabel;
    ComboBox2: TComboBox;
    Label3: TLabel;
    ComboBox3: TComboBox;
    Label4: TLabel;
    ComboBox4: TComboBox;
    Button1: TButton;
    XMLDocument1: TXMLDocument;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
xmldocument1.XML.Text:=ansitoutf8(xmldocument1.XML.Text);
xmldocument1.Active:=true;
for i:=0 to xmldocument1.DocumentElement.ChildNodes.Count-1 do
combobox1.Items.Add(xmldocument1.DocumentElement.ChildNodes[i].Attributes['name']);
if combobox1.Items.Count>0 then
combobox1.ItemIndex:=0;
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to xmldocument1.DocumentElement.ChildNodes.Count-1 do
if combobox1.text=xmldocument1.DocumentElement.ChildNodes[i].Attributes['name'] then
for j:=0 to xmldocument1.DocumentElement.ChildNodes[i].ChildNodes.Count-1 do
combobox2.Items.Add(xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].Attributes['name']);
if combobox2.Items.Count>0 then
combobox2.ItemIndex:=0;
end;
 
procedure TForm1.ComboBox2Change(Sender: TObject);
var
i,j,k:integer;
begin
for i:=0 to xmldocument1.DocumentElement.ChildNodes.Count-1 do
if combobox1.text=xmldocument1.DocumentElement.ChildNodes[i].Attributes['name'] then
for j:=0 to xmldocument1.DocumentElement.ChildNodes[i].ChildNodes.Count-1 do
if combobox2.text=xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].Attributes['name'] then
for k:=0 to xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes.Count-1 do
combobox3.items.add(xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes[k].Attributes['name']);
if combobox3.Items.Count>0 then
combobox3.ItemIndex:=0;
end;
 
procedure TForm1.ComboBox3Change(Sender: TObject);
var
i,j,k,n:integer;
begin
for i:=0 to xmldocument1.DocumentElement.ChildNodes.Count-1 do
if combobox1.text=xmldocument1.DocumentElement.ChildNodes[i].Attributes['name'] then
for j:=0 to xmldocument1.DocumentElement.ChildNodes[i].ChildNodes.Count-1 do
if combobox2.text=xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].Attributes['name'] then
for k:=0 to xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes.Count-1 do
if combobox3.text=xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes[k].Attributes['name'] then
for n:=0 to xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes[k].childnodes.Count-1 do
combobox4.Items.Add(xmldocument1.DocumentElement.ChildNodes[i].childnodes[j].childnodes[k].childnodes[n].Attributes['name']);
if combobox4.Items.Count>0 then
combobox4.ItemIndex:=0;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
 
end.
Прилагаю проект на Delphi.
1
Вложения
Тип файла: zip XML1.zip (246.5 Кб, 1 просмотров)
bartle
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 59
28.02.2016, 11:58  [ТС] #6
unifikator, Спас]ибо большое за отклик, вчера посидел, почитал и сделал сам.
Даже на 3 разных столбца комбобокса [ATTACH]654922[/ATTACH
0
Миниатюры
Xml и Combobox  
qwertehok
1584 / 1575 / 333
Регистрация: 29.08.2013
Сообщений: 10,536
28.02.2016, 16:00 #7
bartle, как-то не логично - 3 одинаковых элемента
может вы сверху RadioGroup добавите с элементами
"Список, БазаУ.., БазаП.."?

а внизу уже ваш поиск того что нужно
0
28.02.2016, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2016, 16:00
Привет! Вот еще темы с ответами:

Передать строку XML и получить другую строку XML в параметрах метода - Delphi
Добрый день, коллеги! Мне нужно положить XML в массив WideChar и вызвать метод, делаю так: procedure TForm1.btnGetInfoClick(Sender:...

ComboBox.Text и ComboBox.Items.Text - Delphi
Всем доброго времени суток. Помогите пожалуйста с такой проблемой...Как объединить combobox.text и combobox.items.text. Есть fpath который...

ComboBox - Delphi
Скажите кто знает как по елементам ComboBox можно пройтись циклом.

Combobox - Delphi
Как заполнить combobox через case?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru