Страница 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);