Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TXMLDocument Struktur erstellen jedoch bleibt die Datei

  Alt 8. Dez 2008, 08:59
Hier mal der komplette Quelltext der Konsolenanwendung inkl. der Coinitialize Anweisung.

Also das Programm soll eine ini Datei einlesen und die Daten dann entsprechend in einer XML Datei wieder speichern.

In einer Test Anwendung (GUI) passiert ebenfalls nichts, die Datei wird zwar erstellt aber immer ohne Inhalt. In der
Konsolen Anwendung erhalte ich nach der Tastenabfrage am Ende noch eine Exception die aber nicht näher Beschrieben wird
oder der Ursprung festzustellen ist.

Irgendwie bin ich grade ziemlich ratlos. Was vielleicht mal helfen würde wenn mir jemand ein kleines Beispiel geben
könnte wie man mit Hilfe von TXMLDocument eine XML Datei erzeugt. Also ein funktionierendes Beispiel

Delphi-Quellcode:
program TabConv;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  INIFiles,
  Forms,
  Classes,
  uTools,
  xmldom,
  XMLIntf,
  msxmldom,
  XMLDoc,
  ActiveX;

type
  tTable = record
    Name : String;
    Fields : array of string;
  end;

  tTables = array of tTable;


var
  INI : TIniFile;
  Tables : tTables;
  Sections : TStringList;
  Idx,i : Integer;
  Count : Integer;
  XMLDoc : TXMLDocument;
  RootNode : IXMLNode;
  ItemNode : IXMLNode;

begin
  try
  { TODO -oEntwickler -cKonsole Main : Hier Code einfügen }
    //init
    CoInitialize(nil);
                             
    //Ini Datei öffnen
    ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'tables.ini');
    try
      //Sektionen ermitteln
      Sections := TStringList.Create;
      try
        //Sektionen aus ini Datei auslesen
        ini.ReadSections(Sections);

        //Anzahl der Tabellen setzen
        SetLength(Tables, Sections.Count);

        //Namen der einzelnen Tabellen ermitteln
        for Idx := 0 to High(Tables) do begin
          Tables[Idx].Name := Sections[Idx];
        end;{for}

      finally
        Sections.Free;
      end;

      //Tabellen einlesen
      if Length(Tables) > 0 then begin
        for Idx := 0 to High(Tables) do begin
          //Anzahl der "Spalten" ermitteln
          Count := ini.ReadInteger(Tables[Idx].Name, 'count', 0);

          //Anzahl der Spalten zuweisen...
          SetLength(Tables[Idx].Fields, Count);

          ///"Spalten" einlesen
          for i := 0 to High(Tables[Idx].Fields) do begin
            Tables[Idx].Fields[i] := ini.ReadString(Tables[Idx].Name, IntToStr(i), 'IIDNR');
          end;{for}

        end;{for}
      end;{if}

    finally
      ini.Free;
    end;

    //Nach XML Konvertieren
    if Length(Tables) > 0 then begin
      XMLDoc := TXMLDocument.Create(Application);
      try
        XMLDoc.Active := True;
        XMLDoc.Version := '1.0';
        XMLDoc.Encoding := 'UFT-8';

        //Root Node
        RootNode := XMLDoc.AddChild('tables');

        for Idx := 0 to High(Tables) do begin
          ItemNode := RootNode.AddChild('tab'+IntToStr(Idx));
          ItemNode.Attributes['name'] := Tables[Idx].Name;
        end;{for} 

        //XML Dokument formatieren
        XMLDoc.XML.Text := FormatXMLData(XMLDoc.XML.Text);
        XMLDoc.Active := True;

        //XML Dokument speichern
        XMLDoc.SaveToFile('tables.xml');
      finally
        XMLDoc.Free;
      end;

    end;{if}

    Writeln;
    Writeln(fAnsiToAscii('Beliebige Taste für weiter...'));
    Readln;

  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;

  //deinit
  CoUninitialize;

end.
Falls das jemand bei Sich Testen will die Ini Datei ist wie folgt aufgebaut.

Zitat:
[Tab_Name]
count=3
0=Feld1
1=Feld2
2=Feld3
  Mit Zitat antworten Zitat