AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

array als xml speichern

Ein Thema von schwarzer_kaffee · begonnen am 2. Okt 2008 · letzter Beitrag vom 6. Okt 2008
Antwort Antwort
schwarzer_kaffee

Registriert seit: 2. Okt 2008
5 Beiträge
 
#1

array als xml speichern

  Alt 2. Okt 2008, 11:59
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:
<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>
ich weiß jetzt nicht ob ich damit mein problem genau genug beschrieben habe^^
falls es nicht so sein sollte, erkläre ich es noch genauer


vielen Dank

schwarzer_kaffee
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: array als xml speichern

  Alt 2. Okt 2008, 12:01
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!
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
schwarzer_kaffee

Registriert seit: 2. Okt 2008
5 Beiträge
 
#3

Re: array als xml speichern

  Alt 2. Okt 2008, 14:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: array als xml speichern

  Alt 2. Okt 2008, 15:03
Hi,

Schau mal ob du die Komponente "TXMLDocument" bzw. die Units XmlIntf, XmlDoc und/oder XmlDom hast.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
schwarzer_kaffee

Registriert seit: 2. Okt 2008
5 Beiträge
 
#5

Re: array als xml speichern

  Alt 2. Okt 2008, 18:36
die komponente und die units sind vorhanden. ich hab auch noch msxmldom, falls die auch gebraucht werden sollte ^^
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: array als xml speichern

  Alt 2. Okt 2008, 21:04
Fang' im Kleinen an und baue daraus die XML-Datei auf. (Bottom-Up-Design)
Also erst mal ein "Punkt"-Element erzeugen:
Delphi-Quellcode:
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;
Der Code ist ungetestet und du musst sicher noch etwas anpassen, aber der Knackpunkt ist,
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
  Mit Zitat antworten Zitat
schwarzer_kaffee

Registriert seit: 2. Okt 2008
5 Beiträge
 
#7

Re: array als xml speichern

  Alt 5. Okt 2008, 09:23
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?
  Mit Zitat antworten Zitat
schwarzer_kaffee

Registriert seit: 2. Okt 2008
5 Beiträge
 
#8

Re: array als xml speichern

  Alt 6. Okt 2008, 11:48
----------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:
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;
jetzt bräuchte ich nur noch 'ne schleife um das für die anderen werte auch machen zu können.
  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 04:19 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