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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2013, 17:20   #1
Azrael2155
Пользователь
 
Регистрация: 05.11.2013
Сообщений: 13
По умолчанию Вывод данных из БД в XML формат

Сам вывод у меня работает, но не в том виде, что хотелось бы...

код вывода такой:

Код:
procedure TXML_Main.LoadToXMLClick(Sender: TObject);

var
   Doc: IXMLDocument;
   Node, Cnode: IXMLNode;
begin
  Doc := NewXMLDocument;
  Node := Doc.AddChild('ArrayOf'+edit1.Text);
  doc. GeneratePrefix()

 xml_dm.ADODataSet1.First;
 while not xml_dm.ADODataSet1.eof do begin

 Cnode := Node.AddChild(Edit1.text);

 if xml_dm.ADODataSet1.FindField('Parent')<>nil then begin

  Cnode.addchild('id').Text:= xml_dm.ADODataSet1.FieldByName('ID').AsString;
  Cnode.AddChild('Name').Text := xml_dm.ADODataSet1.FieldByName('Name').AsString;
  Cnode.AddChild('Parent').Text := xml_dm.ADODataSet1.FieldByName('Parent').AsString;
    xml_dm.ADODataSet1.Next;
 end else begin

  Cnode.addchild('id').Text:= xml_dm.ADODataSet1.FieldByName('ID').AsString;
  Cnode.AddChild('Name').Text := xml_dm.ADODataSet1.FieldByName('Name').AsString;
    xml_dm.ADODataSet1.Next;

 end;
  end;
     if saveDialog1.Execute then
     doc.SaveToFile(Savedialog1.FileName);
  end;

и вывод выглядит так:

PHP код:
<?xml version="1.0"?>
<ArrayOfSpeciality>
 <Speciality>
   <id>44</id>
    <Name>Немедицинские специальности</Name>
      <Parent/>
 </Speciality>
 <Speciality>
   <id>45</id>
    <Name>ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ</Name>
     <Parent>44</Parent>
 </Speciality>
 <Speciality>
   <id>46</id>
    <Name>Математика</Name>
     <Parent/>
 </Speciality>
</ArrayOfSpeciality>

вот, а нужно, что бы было вот так

PHP код:
<?xml version="1.0"?>
<ArrayOfSpeciality xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Speciality>
   <id>44</id>
    <Name>Немедицинские специальности</Name>
      <Parent xsi:nil="true"/>
 </Speciality>
 <Speciality>
   <id>45</id>
    <Name>ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ</Name>
     <Parent>44</Parent>
 </Speciality>
 <Speciality>
   <id>46</id>
    <Name>Математика</Name>
     <Parent xsi:nil="true"/>
 </Speciality>
</ArrayOfSpeciality>

Тобешь хотелось бы, чтобы выводилась шапка "<ArrayOfSpeciality xmlns:xsd="http..." и Parent если отсутсвует в таблице то писал "<Parent xsi:nil="true"/>"



Помогите, люди добрые )

Последний раз редактировалось Stilet; 14.11.2013 в 14:36.
Azrael2155 вне форума Ответить с цитированием
Старый 13.11.2013, 17:36   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

при создании рута надо и указывать ваши схемы.

что касается парента, то сделать вложенным и выбросить парент как таковой
eval вне форума Ответить с цитированием
Старый 13.11.2013, 17:49   #3
Azrael2155
Пользователь
 
Регистрация: 05.11.2013
Сообщений: 13
По умолчанию

Прости, не понял, как это выбросить парент ? и на счет рута тоже не догнал ))) я еще нубас в этом деле просто )
Azrael2155 вне форума Ответить с цитированием
Старый 13.11.2013, 18:43   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

рут это у вас ArrayOfSpeciality

а вложенным так
Код:
<ArrayOfSpeciality xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Speciality>
   <id>44</id>
    <Name>Немедицинские специальности</Name>
    <Speciality>
      <id>45</id>
      <Name>ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ</Name>
    </Speciality>
 </Speciality>
 <Speciality>
   <id>46</id>
    <Name>Математика</Name>
  </Speciality>
</ArrayOfSpeciality>
eval вне форума Ответить с цитированием
Старый 14.11.2013, 08:55   #5
Azrael2155
Пользователь
 
Регистрация: 05.11.2013
Сообщений: 13
По умолчанию

Я вводил схемы, которые надо, но он ругается на двоеточия, запятые и так далее.
Azrael2155 вне форума Ответить с цитированием
Старый 19.11.2013, 09:06   #6
Azrael2155
Пользователь
 
Регистрация: 05.11.2013
Сообщений: 13
По умолчанию

Все сделал, все работает )

если кому то понадобится сделал так:

PHP код:
procedure TXML_Main.LoadToXMLClick(SenderTObject);

var
   
DocIXMLDocument;
   
NodeCnodeIXMLNode;

begin
  doc 
:= NewXMLDocument;
   
Node := Doc.AddChild('ArrayOf'+edit1.Text);
    
doc.Version := '1.0';
    
doc.StandAlone := 'no';
    
doc.DocumentElement.Attributes['xmlns:xsd'] := 'http://www.w3.org/2001/XMLSchema';
    
doc.DocumentElement.SetAttributeNS('xmlns:xsi','''http://www.w3.org/2001/XMLSchema-instance');
      
xml_dm.ADODataSet1.First;
while 
not xml_dm.ADODataSet1.eof do begin

 Cnode 
:= Node.AddChild(Edit1.text);

 if 
xml_dm.ADODataSet1.FindField('Parent')<>nil then begin

  Cnode
.addchild('ID').Text:= xml_dm.ADODataSet1.FieldByName('ID').AsString;
  
Cnode.AddChild('Name').Text := xml_dm.ADODataSet1.FieldByName('Name').AsString;

 if 
xml_dm.ADODataSet1.FieldByName('Parent').AsString<>'' then
    Cnode
.AddChild('Parent').Text := xml_dm.ADODataSet1.FieldByName('Parent').AsString
    
else  cnode.AddChild('Parent').Attributes['xsi:nil']:=true;
 
xml_dm.ADODataSet1.Next;
 
end else begin

   Cnode
.addchild('ID').Text:= xml_dm.ADODataSet1.FieldByName('ID').AsString;
   
Cnode.AddChild('Name').Text := xml_dm.ADODataSet1.FieldByName('Name').AsString;
 
xml_dm.ADODataSet1.Next;

 
end;
  
end;
     if 
saveDialog1.Execute then
    doc
.SaveToFile(Savedialog1.FileName);


  
end
Azrael2155 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных в формате XML Elena_20 Помощь студентам 8 02.04.2013 14:52
Формат XML lobova Помощь студентам 1 23.09.2012 02:16
Формат XML. Проблемы hassassin Софт 1 09.09.2009 17:14
вывод xml данных из TreeView в webbrowser Dr.XxX Общие вопросы Delphi 1 10.10.2008 12:06