Hallo,
ich habe folgendes Problem:
ich möchte verschiedene
xml-Files, von verschiedenen Applikationen aus, parsen. Dafür schreibe ich eine
Unit mit einer Klasse.
Die wichtigste Eigenschaft dabei soll ein Record werden, der die Struktur, generiert über eine XPATH Anweisung, abbildet.
Aus den einzelnen Applikationen sollen jetzt unterschiedlich aufgebaute Records übergeben werden.
Die
XML und die jeweilige Applikation (mit den Records) sind aufeinander abgestimmt. Die
XML-
Unit soll weitesgehend generisch sein, wird aber auch funktionell auf verschiedene
XML's
abgestimmt - d.h. ich übergebe den
XML-Filename, XPATH-Pattern und einen speziellen Parameter - dieser dient dazu unterschiedliche Prozeduren/Funktionen aufzurufen die die speziellen Records zu füllen.
Das ganze sieht ungefähr so aus:
Bsp.
XML
Code:
<CONFIG>
<!-- Section general Properties -->
<generalProperties>
<credentials>
<server>test_s1</server>
<scp_user>xy</scp_user>
<sshKey>key.ppk</sshKey>
</credentials>
</generalProperties>
<Testers>
<Tester Type='T1'>
<Program>prog.exe</Program>
<SPath>C:\Program Files\zap\bin</SPath>
<dest>/unix/calibrationdata_mflex</dest>
<cPath Path='Tester'>
<ProgPath>C:\Program Files\Tester</ProgPath>
<cFiles>CurrentConfig.txt</cFiles>
</cPath>
<cPath Path='DCCM'>
<ProgPath>C:\Program Files\SupportBoard\DCCM</ProgPath>
<cFiles>*.txt;*.csv</cFiles>
</cPath>
<cPath Path='POOL_Logs'>
<ProgPath>C:\Program Files\POOL_Calibration_Logs</ProgPath>
<cFiles>*</cFiles>
</cPath>
</Tester>
<Tester Type='T2'>
.
.
.
</Tester>
</Testers>
es gibt jetzt z.B. 2 Records
Delphi-Quellcode:
// Record 1
credR = record
server : string;
scp_user : string;
sshKey : string;
end;
credPtr = ^credR;
// Record 2
xmlRec = record
Program : TStringList;
cPath : cPathDict;
SPath : string;
dest : string;
end;
xmlPtr = ^xmlRec;
diese beiden Records befinden sich in einer Applikation
In der
xml-
Unit ist jetzt eine Klasse definiert wie:
Delphi-Quellcode:
TXML = Class
private
FRC : Integer;
FErrStr : string;
debugS : string;
FxmlF : PAnsiChar;
FxmlPar : string;
FPattern : PAnsiChar;
Fdebug : TStrings;
public
constructor Create(dpar : string);
Destructor Destroy; override;
procedure/function readXML(XMLfile : xx; .. : yy...);
// xmlRec : ??????????
property xmlFile : string Read FxmlF;
property xmlPar : PAnsiChar Read FxmlPar;
property rc : Integer Read FRC;
property errStr : string Read FErrStr;
property pattern : PAnsiChar Read FPattern;
property debugL : TStrings Read Fdebug Write Fdebug;
end;
Was ich jetzt gern machen würde wäre folgendes:
in der Applikation wird die Klasse initialisiert, der Record 1 wird übergeben und durch eine Procedure/Function in der
Unit gefüllt
in einem späteren Schritt möchte ich über eine andere Procedure/Function den Record 2 füllen
Ich hoffe es ist einigermaßen verständlich
Meine Frage: ist dies möglich und wenn ja dann WIE??