|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Экспорт записей в xml
Всем добрый день!
Мне нужно из двух таблиц 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)
|