Помогите перевести 2 функции под лазарус

Модератор: Модераторы

Помогите перевести 2 функции под лазарус

Сообщение CynicRus » 25.10.2012 10:29:20

Добрый день, необходимо конвертировать 2 функции сохранения документа определенной структуры в XML формат, с дельфи под Lazarus.
Код: Выделить всё
//----------------------------------------------------------------
procedure TConfig.Package_SaveToXmNode(aParentNode: IXMLNode; aPackageItem:
    TPackageItem);
//----------------------------------------------------------------
var
  I: Integer;
  j: Integer;
  oFileItem: TFileItem;
  vNode,vNode1: IXMLNode;
  s: string;
begin
  for I := 0 to aPackageItem.Files.Count - 1 do
  begin
    oFileItem:=aPackageItem.Files[i];

    vNode:=aParentNode.AddChild('file');

    vNode.Attributes['filename']:= oFileItem.FileName;
    vNode.Attributes['author']  := oFileItem.Author;
    vNode.Attributes['email']   := oFileItem.EMail;


    s:=DateTimeToStr(oFileItem.DateModify);
    vNode.Attributes['date_modify'] := s;

    if oFileItem.description<>'' then
      vNode.AddChild('description').Text:= oFileItem.description;

    for j := 0 to oFileItem.SubFiles.Count - 1 do
      vNode.AddChild('file').Attributes['name'] := oFileItem.SubFiles[j];
  end;

end;



//----------------------------------------------------------------
procedure TConfig.SaveToXmlFile(aFileName: string);
//----------------------------------------------------------------

    //----------------------------------------------------------------
    procedure DoSavePackages(aParentNode: IXMLNode);
    //----------------------------------------------------------------
    var
      I: Integer;
      vNode: IXMLNode;
    begin
      for I := 0 to Count - 1 do
      begin
        vNode:=aParentNode.AddChild('structure');
        vNode.Attributes['name']:=Items[i].Name;

        Package_SaveToXmNode(vNode, Items[i]);
      end;
    end;

var
  oXmlDocument: TXmlDocument;
  vRoot: IXMLNode;
begin
  oXmlDocument:=TXmlDocument.Create(Application);

  oXmlDocument.Options:=oXmlDocument.Options + [doNodeAutoIndent];
  oXmlDocument.Active:=true;

  oXmlDocument.Version:='1.0';
// XmlDocument.Encoding:='UTF-8';
  oXmlDocument.Encoding:='windows-1251';

  vRoot:=oXmlDocument.AddChild('xml');
  vRoot.Attributes['xmlns']:='http://www.opengis.net/kml/2.2';
  vRoot.Attributes['xmlns:gx']:='http://www.google.com/kml/ext/2.2';


  vRoot:=vRoot.AddChild('Document');

  DoSavePackages (vRoot);

  oXmlDocument.SaveToFile(aFileName);

  FreeAndNil(oXmlDocument);

end;
Собственно - вот функции. Они отлажены в дельфи и работают. Пробовал самостоятельно, но уж больно в документации заморочена работа записи. Цена вопроса 20 WMZ, если недостаточно - то пишите свою цену. Спасибо.

Добавлено спустя 2 часа 24 минуты 50 секунд:
В результате сам сделал:
Код: Выделить всё
procedure TScriptStorage.SaveLocalXMLRegistry(aFileName: string);
var
  oXmlDocument: TXmlDocument;
  vRoot,ParentNode,PackageNode,TempNode,Description,FileItemNode,SubFileNode: TDOMNode;
  i,d,j: integer;
  s: string;
  oFileItem: TFileItemEx;
begin
  oXmlDocument:=TXmlDocument.Create;
  //oXmlDocument.Version:='1.0';
  oXmlDocument.Encoding:='UTF-8';
  //oXmlDocument.Encoding:='windows-1251';
  vRoot:=oXmlDocument.CreateElement('xml');
  TDOMElement(vRoot).SetAttribute('xmlns','http://www.opengis.net/kml/2.2');
  TDOMElement(vRoot).SetAttribute('xmlns:gx','http://www.opengis.net/kml/2.2');
  oXmlDocument.AppendChild(vroot);
  vRoot:=oXMLDocument.DocumentElement;
  ParentNode:=oXmlDocument.CreateElement('Document');
  vRoot.AppendChild(ParentNode);
  for i:=0 to count -1 do
     begin
       PackageNode:=oXmlDocument.CreateElement('structure');
       TDOMElement(PackageNode).SetAttribute('name',Items[i].Name);
         for d:=0 to Items[i].Files.Count - 1 do
            begin
              oFileItem:=Items[i].Files.ItemsEx[d];
              FileItemNode:=oXMLDocument.CreateElement('file');
              TDOMElement(FileItemNode).SetAttribute('filename',oFileItem.FileName);
              TDOMElement(FileItemNode).SetAttribute('author',oFileItem.Author);
              TDOMElement(FileItemNode).SetAttribute('email',oFileItem.EMail);
              TDOMElement(FileItemNode).SetAttribute('version',FloatToStr(oFileItem.Version));
              TDOMElement(FileItemNode).SetAttribute('installed',IntToStr(oFileItem.Installed));
              s:=DateTimeToStr(oFileItem.DateModify);
              TDOMElement(FileItemNode).SetAttribute('date_modify',s);
                if oFileItem.description<>'' then
                 begin
                   TempNode:=oXMLDocument.CreateElement('description');
                   Description:=oXMLDocument.CreateTextNode(oFileItem.description);
                   TempNode.AppendChild(Description);
                   FileItemNode.AppendChild(TempNode);
                   end;
              for j := 0 to oFileItem.SubFiles.Count - 1 do
                begin
                   SubFileNode:=oXMLDocument.CreateElement('subfile');
                   TDOMElement(SubFileNode).SetAttribute('filename',oFileItem.SubFiles[j].FileName);
                   TDOMElement(SubFileNode).SetAttribute('filepath',oFileItem.SubFiles[j].UnpPath);
                   FileItemNode.AppendChild(SubFileNode);
                end;
             PackageNode.AppendChild(FileItemNode);
            end;
      // vRoot.AppendChild(PackageNode);
      vRoot.ChildNodes.Item[0].AppendChild(PackageNode);
     end;
  WriteXMLFile (oXmlDocument,aFileName);
  FreeAndNil(oXmlDocument);
end;
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Помогите перевести 2 функции под лазарус

Сообщение vada » 25.10.2012 17:48:38

Как на счет 20 WMZ?
Хотелось бы получить :lol:
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Помогите перевести 2 функции под лазарус

Сообщение CynicRus » 27.10.2012 03:21:26

Получить за то, что я сделал сам?-))))
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Помогите перевести 2 функции под лазарус

Сообщение SSerge » 27.10.2012 04:52:25

Сделал - убери за собой :)
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул


Вернуться в Помощь за вознаграждение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru