AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Delphi klasse in xml format exportieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi klasse in xml format exportieren

Ein Thema von usman78 · begonnen am 7. Mär 2007 · letzter Beitrag vom 7. Mär 2007
Antwort Antwort
usman78

Registriert seit: 7. Mär 2007
1 Beiträge
 
#1

Delphi klasse in xml format exportieren

  Alt 7. Mär 2007, 11:39
Hallo Fachleute,
Meine Frage ist folgendes:

Ich habe eine Delphi-Klasse.... angenommen -> Person mit Attributen wie name,vorname,Adresse,plz,GebDatum etc etc.
Ich muss jetzt nur noch einen Modul schreiben welches mir diese Daten von Person in einer xml Datei mit xml format ausgeben.

Das Format soll folgendes aussehen

<Person>
<name> mustername </name>
<vorname> mustervorname </vorname>
<Adresse> musterAdresse </Adresse>
.....
.....
..... usw.
</Person>

Alle attribute sind vom typ string



Kann mir Bitte jemand mitteilen, wie man es am besten machen kann.
Danke vielmals dafür im voraus.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Delphi klasse in xml format exportieren

  Alt 7. Mär 2007, 16:03
Also...wenns einfach sein soll, bau dir eine Methode, die dir via Format deine Datenfelder in einen String umwandelt, häng den XML-Header/Footer rann und fertig.

Ein kleines Muster mal als Beispiel:


Delphi-Quellcode:
const
   cTagBegin='<%s>%s';
   cTagEnd='</%s>';

  :
function TPerson.PersonToString:String;
begin
  result := format(cTagBegin,['Person','']);
  result := result+format(cTagBegin,['Name',fname])+format(cTagEnd,['Name']);
   :
end;

procedure TPerson.SchreibeXMLDatei;
var
  output : TStrings;
begin
  output := TStringlist.create;
  output.append(cXMLHeader);
  output.append(MyPerson.PersonToString);
   :
  ouput.append(cXMLFooter);
  output.savetofile(MyFilename);
  output.free;
end;
Wie XMLHeader und Footer aussehen müssen, guggst du dir am besten mal in einem XML-Dokument an.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#3

Re: Delphi klasse in xml format exportieren

  Alt 7. Mär 2007, 16:16
Schau Dir mal die Unit TypInfo an. Da kannst Du auf die RTTI zugreifen, die Delphi auch intern zum streamen von Klassen benutzt. Über die RTTI kannst Du (fast) alle Attributtypen in Strings verwandeln und umgekehrt. Diese musst Du dann nur noch passend aufarbeiten. Hier mal als Anregung ein Stück aus meinem XML-Parser delegaten für mein XML-Interface:
Delphi-Quellcode:
//______________________________________________________________________________
function TXMLStreamDelegate.ReadFromXML(_oParent: IXMLNode): Boolean;
Var
  bOwnerHandled: Boolean;
  dValue: Extended;
  iCount: Integer;
  iLoop: Integer;
  iValue: Integer;
  pInfo: PPropList;
  sName: String;
  sValue: String;
  oNode: IXMLNode;
  oObj: TObject;
  oXMLStream: IXMLStream;
begin
  Result:=True;
  iCount:=GetPropList( Owner, pInfo);
  For iLoop:=0 To Pred(iCount)
  Do Begin
    sName:=pInfo[iLoop].Name;
    bOwnerHandled:=False;
    If Assigned(OnOwnerSreamProperty)
    Then Result:=OnOwnerSreamProperty( sName, _oParent, saRead, bOwnerHandled);
    If Not bOwnerHandled
    And Result
    Then Begin
      Case pInfo[iLoop].PropType^.Kind Of
        tkClass: Begin
          oObj:=GetObjectProp( Owner, sName);
          If oObj.GetInterface( IXMLStream, oXMLStream)
          Then Begin
            oNode:=_oParent.ChildNodes.FindNode(sName);
            If Assigned(oNode)
            Then oXMLStream.ReadFromXML(oNode)
            Else Result:=False;
          End;
        End;
        tkInteger,
        tkChar,
        tkWChar: Begin
          Result:=ReadValue( _oParent, sName, iValue);
          If Result
          Then SetOrdProp( Owner, pInfo[iLoop], iValue);
        End;
        tkEnumeration: Begin
          Result:=ReadValue( _oParent, sName, sValue);
          If Result
          Then SetEnumProp( Owner, pInfo[iLoop], sValue);
        End;
        tkSet: Begin
          Result:=ReadValue( _oParent, sName, sValue);
          If Result
          Then SetSetProp( Owner, pInfo[iLoop], sValue);
        End;
        tkFloat: Begin
          Result:=ReadValue( _oParent, sName, dValue);
          If Result
          Then SetFloatProp( Owner, pInfo[iLoop], dValue);
        End;
        tkMethod: ;
        tkString,
        tkLString: Begin
          Result:=ReadValue( _oParent, sName, sValue);
          If Result
          Then SetStrProp( Owner, pInfo[iLoop], sValue);
        End;
        tkWString: Begin
          Result:=ReadValue( _oParent, sName, sValue);
          If Result
          Then SetWideStrProp( Owner, pInfo[iLoop], sValue);
        End;
        tkInt64: Begin
          Result:=ReadValue( _oParent, sName, iValue);
          If Result
          Then SetInt64Prop( Owner, pInfo[iLoop], iValue);
        End;
        Else Begin
          raise EPropertyConvertError.CreateResFmt( @SInvalidPropertyType,
                                                 [pInfo[iLoop].PropType^.Name]);
        End;
      end;
    End;
    If Not Result
    Then Break;
  End;
  If Result
  And Assigned(OnOwnerStream)
  Then Result:=OnOwnerStream( _oParent, saRead);
end;
In dem Beispiel ist der Delegat ein Member einer beliebiggen TComponent-Klasse die das Interface IXMLStream bereitstellt. Die Events OnOwnerStream und OnOwnerStreamProperty dienen dazu, dass die Owner-Instanz u.U. selber properties schreiben und lesen kann. Alles erklären würde zu weit führen und den ganzen Code will ich eigentlich auch nicht posten aber ich hoffe, ich hab deine Gizmos angeregt.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz