Einzelnen Beitrag anzeigen

mtbf40

Registriert seit: 11. Okt 2013
3 Beiträge
 
#1

universaler record in Klasse

  Alt 27. Jan 2020, 17:30
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??
  Mit Zitat antworten Zitat