![]() |
array als xml speichern
hallo.
ich habe zwei arrays: Koordinatenarray: array[1..12,1..3]of integer; Linienarray: array[1..12,1..3,1..2] of integer; Koordinatenarray[i+1,1]:=x; Koordinatenarray[i+1,2]:=y; Koordinatenarray[i+1,3]:=i+1; <-- id. des Punktes Linienarray[Linienzahler,1,1] := Koordinatenarray[q,1] ; <--- x-Anfang Linienarray[Linienzahler,2,1] := Koordinatenarray[q,2] ; <--- y Anfang Linienarray[Linienzahler,3,1] := Koordinatenarray[q,3]; <---- Anfangspunkt Linienarray[Linienzahler,1,2] := Koordinatenarray[q,1] ; <----x-Endpunkt Linienarray[Linienzahler,2,2] := Koordinatenarray[q,2] ; <----y-Endpunkt Linienarray[Linienzahler,3,2] := q ; <---- Endpunkt wie kann ich die arrays als xml speichern, so dass die xml etwa so aussieht?
XML-Code:
ich weiß jetzt nicht ob ich damit mein problem genau genug beschrieben habe^^
<graph>
<Punkte> <ein_Punkt> <id>1</id> <X>24</X> <Y>182</Y> </ein_Punkt> <ein_Punkt> <id>2</id> <X>81</X> <Y>152</Y> </ein_Punkt> <ein_Punkt> <id>3</id> <X>33</X> <Y>116</Y> </ein_Punkt> </Punkte> <wege> <von> <begin_id>1</begin_id> <beginx>24</beginx> <beginy>182</endx> </von> <bis> <begin_id>2</begin_id> <endx>81</beginx> <endy>152</endx> </bis> <von> <begin_id>2</begin_id> <beginx>81</beginx> <beginy>152</endx> </von> <bis> <begin_id>3</begin_id> <endx>33</beginx> <endy>116</endx> </bis> <von> <begin_id>3</begin_id> <beginx>33</beginx> <beginy>116</endx> </von> <bis> <begin_id>1</begin_id> <endx>24</beginx> <endy>182</endx> </bis> </wege> </graph> falls es nicht so sein sollte, erkläre ich es noch genauer vielen Dank schwarzer_kaffee |
Re: array als xml speichern
Wenn du die JEDI-Komponenten installiert hast, kannst du dir mal TJvSimpleXML angucken, damit lässt sich eine XML-Datei relativ einfach erstellen.
€dit: Herzlich Willkommen in der dp! :hi: :dp: |
Re: array als xml speichern
hi Reinhardtinho,
leider benutze ich Turbo Delphi. Bei der kann man keine Komponenten von Fremdanbietern hinzufügen. von daher werde ich das wohl ohne zusätzliche komponenten machen müssen. |
Re: array als xml speichern
Hi,
Schau mal ob du die Komponente "TXMLDocument" bzw. die Units XmlIntf, XmlDoc und/oder XmlDom hast. |
Re: array als xml speichern
die komponente und die units sind vorhanden. ich hab auch noch msxmldom, falls die auch gebraucht werden sollte ^^
|
Re: array als xml speichern
Fang' im Kleinen an und baue daraus die XML-Datei auf. (Bottom-Up-Design)
Also erst mal ein "Punkt"-Element erzeugen:
Delphi-Quellcode:
Der Code ist ungetestet und du musst sicher noch etwas anpassen, aber der Knackpunkt ist,
procedure TForm1.CreatePunkt(parent:IXMLDOMElement; id,x,y:integer);
var element, e2 : IXMLDOMElement; begin element := parent.CreateElement('ein_Punkt') as IXMLDOMElement; parent.AppendChildNode(element); e2 := element.CreateElement('Id') as IXMLDOMElement; element.AppendChildNode(e2); e2.Text := IntToStr(id); e2 := element.CreateElement('X') as IXMLDOMElement; element.AppendChildNode(e2); e2.Text := IntToStr(x); ... end; dass du immer eine Procedure hast, die als Parameter ein Vaterelement (parent) übergeben bekommt. Tip #2: die Methoden CreateElement und AppendChildNode brauchst du so oft, dass du dir eine Funktion schreiben solltest, die beides zusammenfasst. Tip #3: definiere für deine Arrays einen Datentyp, damit du die Arrays bequem als Parameter übergeben kannst.
Delphi-Quellcode:
type
TKoordinaten = array[1..12,1..3]of integer; TLinienarray = array[1..2] of TKoordinaten; // cool, wie man mit Pascal Datentypen wiederverwenden kann |
Re: array als xml speichern
hi
vielen dank für deine hilfe. leider hat dein array, so wie es da steht, nicht funtkioniert. allerdings habe ich so ganz gut verstanden wie man eine xml datei aufbaut. ich habe dein code mal als vorlage benutzt und dann so weit rumexperimentiert, bis ich immerhin schon mal die punkte aus dem koordinatenarray speichern kann ^^ das sieht im moment so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject );
var id ,id2,x:integer ; xmldocument1: txmldocument;linienid,punktid, xwerte2,linien,von,bis,xwerte, ywerte, element, element2, element3, punkte:ixmlnode; begin id:=1; id2:=0; xmldocument1:=txmldocument.Create(nil); xmldocument1.Active:=true; element:= xmldocument1.addChild('array2xml'); element.Attributes['app']:= paramstr(0); element2:=element.addChild('Koordinaten'); element2.attributes['aus'] := 'Koordinatenarray'; while id<11 do begin punkte:=element2.addchild('ein_punkt'); // punkte.Attributes['nr'] := inttostr(id); punktid:=punkte.addchild('id'); punktid.text:= inttostr(id); xwerte:=punkte.addChild('x'); xwerte.Text:=inttostr(koordinatenarray[id,1]); // xwerte.attributes['x'+inttostr(id)] := koordinatenarray[id,1]; ywerte:=punkte.addchild('y'); ywerte.Text:=inttostr(koordinatenarray[id,2]); // ywerte.attributes['y'+inttostr(id)]:= koordinatenarray[id,2]; id:=id+1; end; element3:=element.addchild('Linien'); element3.attributes['aus']:= 'Linienarray'; while id2<11 do begin linien:=element3.addchild('eine_Linie'); // linien.Attributes['Nr.'] := inttostr(id2+1); linienid:=linien.addchild('id'); linienid.Text:= inttostr(id2+1); von:=linien.addChild('von'); von.Text:=inttostr(linienarray[id2,3,1]); // von.attributes['punkt'+inttostr(id2)] := linienarray[id2,3,1]; bis:=linien.addchild('bis'); bis.Text:=inttostr(linienarray[id2,3,2] ); // bis.attributes['punkt'+inttostr(id2)]:= linienarray[id2,3,2]; id2:=id2+1; end; XMLdocument1.savetofile(changefileext(ParamStr(0), '.xml')); xmldocument1:=nil; end; damit wären die daten aus dem array in der xml datei gespeichert. wie bekomme ich die daten aus der xml datei jetzt wieder zurück in die arrays? |
Re: array als xml speichern
----------update----------
ich kann immerhin schonmal die erste x variable aus der xml auslesen und ins array einfügen. das sieht dann so aus:
Delphi-Quellcode:
jetzt bräuchte ich nur noch 'ne schleife um das für die anderen werte auch machen zu können.
procedure tform1.Button2Click(Sender: TObject);
var vbn:integer; xmldocument1: ixmldocument; getx: IXMLXType; array2xml,ein_punkt,id,koordinaten,linien,von,bis,xwerte, ywerte, element, element2, element3, punkte:ixmlnode; ladearray: IXMLArray2xmlType; blubbel: IXMLKoordinatenType; node: ixmlnode; begin xmldocument1 := newXMLDocument; if opendialog1.execute then begin XMLdocument1.loadfromfile(openDialog1.FileName) ; xmldocument1.Active:=true; array2xml:=xmldocument1.DocumentElement; koordinaten:= array2xml.childnodes['Koordinaten']; ein_punkt:= koordinaten.ChildNodes['ein_punkt'] ; id:= ein_punkt.ChildNodes['id']; xwerte:=ein_punkt.ChildNodes['x']; koordinatenarray[1,1]:=strtoint(xwerte.text); showmessage(inttostr(koordinatenarray[1,1])); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz