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