![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Всем добрый день! 
		
	
		
		
		
		
		
		
			Мне нужно из двух таблиц access экспортировать записи в xml. Пытаюсь сделать так: Код: 
	var
 XmlDoc: TXmlDocument; 
 addroot, addnewchild: IXMLNode; 
begin
 ADOQ.SQL.Text :='select Dep, Name_user, Mail_user,  id_user, id_dep_u from tab_users, Ttab_dep where id_user = id_dep_u';
 ADOQ.Open;
  XmlDoc := TXmlDocument.Create(nil);
  XmlDoc.Active := true;
  XMLDocument1.Active := true;
  XmlDoc.Version := '1.0';
  XmlDoc.Encoding := 'UTF-8';
  addroot := XmlDoc.AddChild('City');
  while Not ADOQ.Eof do
    begin
      addnewchild := root.AddChild('Dep');
      addnewchild.SetAttribute(WideString('NameDep'), ADOQ.FieldByName('Dep').AsString);
      addnewchild := addnewchild .AddChild('User');
      addnewchild.SetAttribute(WideString('Name'),ADOQ.FieldByName('Name_user').AsString);
      addnewchild.SetAttribute(WideString('Mail'),ADOQ.FieldByName('Mail_user').AsString);
    end;
	ADOQ.Next
  XmlDoc.SaveToFile('C:\users.xml');
end;Получаю файл с таким форматом: Код HTML: 
	
 Но мне нужно чтобы элемнеты были сгрупированы вот так: Код HTML: 
	
 Может кто-нибудь подсказать как сделать группировку? Если я думаю в правильном направлении нужно сделать цикл в запросе, который обходил бы поле id_dep_u? Или цикл при добавлении Код: 
	addnewchild := addnewchild .AddChild('User')Никак не придумаю) Последний раз редактировалось markII, 13.05.2022 в 14:51.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Можно проще. Просто проверяй на изменене значения в поле Dep и только в этом случае создавай новый узел. 
		
	
		
		
		
		
		
		
			Как-то так: Код: 
	  DepName := '';
  DepNode := Nil;
  addroot := XmlDoc.AddChild('City');
  while Not ADOQ.Eof do
    begin
	  if DepName <> ADOQ.FieldByName('Dep').AsString Then
	    begin
          DepNode := root.AddChild('Dep');
          DepNode.SetAttribute(WideString('NameDep'), ADOQ.FieldByName('Dep').AsString);
          DepName := ADOQ.FieldByName('Dep').AsString;
		end;  
      addnewchild := DepNode.AddChild('User');
      addnewchild.SetAttribute(WideString('Name'),ADOQ.FieldByName('Name_user').AsString);
      addnewchild.SetAttribute(WideString('Mail'),ADOQ.FieldByName('Mail_user').AsString);
	  ADOQ.Next
    end;Последний раз редактировалось lmikle, 13.05.2022 в 21:04.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
markII (14.05.2022)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Спасибо! Все получилось, правда не сразу). Не хватало еще сортировки по id_dep. Последний раз редактировалось markII, 14.05.2022 в 04:05.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну да, предполагается, что датасет отсортирован. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
markII (19.05.2022)
  | ||