Страница 1 из 1

Создание XML в ARD

Добавлено: 08 апр 2010, 16:14
Masygreen
День!
долго втыкал на G_EI_EF.inc ....
и тот пример который есть на форуме как то не впечатлил ... не разобрался я в нем .. в хелпе тоже не нашел ....

Сабж... нужно записать данные в XML из Галактики... если у кого есть примерчик очень признателен...
структура для примера простейшая понять бы механизм, а дальше докопаю :)

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>
<XML_Root>
  <Document_Root Наименование="Верхний уровень" Nrec="0001000000000AB6h">
      <SP_Document Наименование="Спецификация1" Nrec="0001000000000AB6h">
      <SP_Document Наименование="Спецификация2" Nrec="0001000000000AB6h">
      <SP_Document Наименование="Спецификация3" Nrec="0001000000000AB6h">
  </Document_Root>
</XML_Root>

Добавлено: 08 апр 2010, 17:15
edward_K
откройте xml из 2НДФЛ. Структура то простенькая - можно и руками нарисовать. Только может лучше форму не в 1251 делать, а вывести полями с конвертацией. Это для чтения может нужно поизвращаться для универсальности, а по записи проблем вообще нет.

Добавлено: 08 апр 2010, 17:25
Masygreen
edward_K писал(а):Структура то простенькая - можно и руками нарисовать
Это же упрощенный пример, чтоб только технологию понять .. в какой последовательности какие функции из XML в ARD применять ...
сложнее по антологии я сам напишу .. :)

кодировка на этом этапе не принципиальна

Добавлено: 08 апр 2010, 20:30
Vik
Ну если упрощенный пример, то можно как-то так (все переменные имеют тип longint):

Код: Выделить всё

domDocument := XMLDOMDoc_New;
node1       := XMLDOMDoc_CreateProcessingInstruction(domDocument, 'xml', 'version="1.0" encoding="UTF-8" standalone="yes"');
node2       := XMLDOMNode_AppendChild(domDocument, node);
XMLDOMNode_Release(node1);
XMLDOMNode_Release(node2);

rootXMLElement:= XMLDOMDoc_CreateElement(domDocument, 'XML_Root');

rootNode      := XMLDOMNode_AppendChild(domDocument , rootXMLElement);

Document_Root := XMLDOMDoc_CreateElement(domDocument, 'Document_Root');

rootNode      := XMLDOMNode_AppendChild(rootXMLElement , Document_Root);

XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Верхний уровень')
XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '0001000000000AB6h')

   SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document');
   rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document);
   XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Спецификация1')
   XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '0001000000000AB6h')
   XMLDOMNode_Release(SP_Document);

   SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document');
   rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document);
   XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Спецификация2')
   XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '0001000000000AB6h')
   XMLDOMNode_Release(SP_Document);

   SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document');
   rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document);
   XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Спецификация3')
   XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '0001000000000AB6h')
   XMLDOMNode_Release(SP_Document);

XMLDOMNode_Release(Document_Root);
XMLDOMNode_Release(rootXMLElement);
XMLDOMNode_Release(rootNode);
XMLDOMDoc_Save(domDocument, XML_NAME);
XMLDOMDoc_Done(domDocument);

Добавлено: 09 апр 2010, 12:01
Masygreen
Круто! Спасибо... щас буду кодить (прям как кот :) )!!!

Добавлено: 12 апр 2010, 16:28
Masygreen
В коде были баги ... но я их преодолел :) вот уж рабочий кусок для историии!!

Код: Выделить всё

!*********************(с)
#component "CreateXML"
.autoform 'CreateXML'
.ard
.nameinlist 'Создать XML'
.Table blank
.var
 FileName:string;
 domDocument,node,node1,node2,rootXMLElement,rootNode,Document_Root,SP_Document:longint;
.endvar
.begin
  FileName:=GetFileName('*.xml','Выбрать файл');
  
  if(FileName<>'') Then
   {
   //новый xml
   domDocument := XMLDOMDoc_New; 
   
   //Заголовок
   node1       := XMLDOMDoc_CreateProcessingInstruction(domDocument, 'xml', 'version="1.0" encoding="UTF-8" standalone="yes"'); 
   node2       := XMLDOMNode_AppendChild(domDocument, node1); 
   XMLDOMNode_Release(node1); 
   XMLDOMNode_Release(node2); 
   
   //корневой элемент
   rootXMLElement:= XMLDOMDoc_CreateElement(domDocument, 'XML_Root'); 
   rootNode      := XMLDOMNode_AppendChild(domDocument , rootXMLElement); 
   
//******************************************************записываем элемент****************************      
   //создаем Элемент
   Document_Root := XMLDOMDoc_CreateElement(domDocument, 'Document_Root'); 
   rootNode      := XMLDOMNode_AppendChild(rootXMLElement , Document_Root); 
   
   //заполняем атрибуты элемент
   XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Верхний уровень') 
   XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '000100uph') 

     //создаем спецификацию
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация1') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '00010000000001h') 
     XMLDOMNode_Release(SP_Document); 
     
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация2') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '00010000000002h') 
     XMLDOMNode_Release(SP_Document); 
     
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация3') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '00010000000003h') 
     XMLDOMNode_Release(SP_Document); 


   XMLDOMNode_Release(rootNode); //запись сецификация
   XMLDOMNode_Release(Document_Root);//запись элемент
//******************************************************записываем элемент****************************   

//******************************************************записываем элемент****************************   
    //создаем Элемент
   Document_Root := XMLDOMDoc_CreateElement(domDocument, 'Document_Root'); 
   rootNode      := XMLDOMNode_AppendChild(rootXMLElement , Document_Root); 
  
   //заполняем атрибуты элемент
   XMLDOMElement_SetAttribute(Document_Root, 'Name', 'Верхний уровень 2') 
   XMLDOMElement_SetAttribute(Document_Root, 'Nrec', '000100up22222h') 

     //создаем спецификацию
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация12') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '000100000000012h') 
     XMLDOMNode_Release(SP_Document); 
     
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация22') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '000100000000022h') 
     XMLDOMNode_Release(SP_Document); 
     
     SP_Document := XMLDOMDoc_CreateElement(domDocument, 'SP_Document'); 
     rootNode    := XMLDOMNode_AppendChild(Document_Root, SP_Document); 
     XMLDOMElement_SetAttribute(SP_Document, 'Name', 'Спецификация32') 
     XMLDOMElement_SetAttribute(SP_Document, 'Nrec', '000100000000032h') 
     XMLDOMNode_Release(SP_Document); 


   XMLDOMNode_Release(rootNode);//запись сецификация
   XMLDOMNode_Release(Document_Root);//запись элемент
//******************************************************записываем элемент****************************   
   XMLDOMNode_Release(rootXMLElement);//закрываем документ 

   
   XMLDOMDoc_Save(domDocument, FileName); 
   XMLDOMDoc_Done(domDocument);

   }
  CreateXML.fexit;
end.
.endform

[/code]

Добавлено: 12 апр 2010, 16:48
Vik
ну я не тестил то, что писал.. Лишь ctrl-c + ctrl-v, что и заметно. Естественно, что атрибуты надо было устанавливать у SP_Document а не Document_Root))

Добавлено: 13 апр 2010, 14:12
Masygreen
Vik писал(а):ну я не тестил то, что писал.. Лишь ctrl-c + ctrl-v, что и заметно. Естественно, что атрибуты надо было устанавливать у SP_Document а не Document_Root))
это не умаляет ваших заслуг - большое спасибо!!!

ЗЫ там еще косяк
node2 := XMLDOMNode_AppendChild(domDocument, node1);