AGB  ·  Datenschutz  ·  Impressum  







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

Verwendung XML databinding wizard

Ein Thema von bernhard_LA · begonnen am 27. Feb 2020 · letzter Beitrag vom 28. Feb 2020
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Verwendung XML databinding wizard

  Alt 27. Feb 2020, 14:18
werde ich noch machen,
wie bekomme ich jetzt aber einen Parser für meine XML files, hätte gerne ein Referenz Code Beispiel - was ich jetzt am besten mit diesem Auto Created Code mache ....... .
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Verwendung XML databinding wizard

  Alt 27. Feb 2020, 14:36
Der Parser ist in Delphi doch schon drin?!
Hattest du noch nie zuvor mit XML in Delphi gearbeitet?

Anbei als Anhang ein Beispiel zum Einlesen deiner Beispiel-XML mit angepasster graphmlstructure.pas, der man jetzt auch XML-Text oder Dateien vorwerfen kann (Getgraphml() und Loadgraphml() Funktionen):

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  I, J, L: Integer;
  Graphml: IXMLGraphmltype;
  Graph: IXMLGraphtype;
  Node: IXMLNodetype;
  Data: IXMLDatatype;
  XMLDoc: IXMLDocument;
  GraphMLTreeNode, GraphTreeNode, NodeTreeNode: TTreeNode;
begin
  XMLDoc := LoadXMLData(Memo1.Lines.Text);
  Graphml := Getgraphml(XMLDoc);

  TreeView1.Items.BeginUpdate;
  try
    GraphMLTreeNode := TreeView1.Items.Add(nil, Graphml.NodeName);
    for I := 0 to Graphml.Graph.Count - 1 do
    begin
      Graph := Graphml.Graph.Items[I];
      GraphTreeNode := TreeView1.Items.AddChild(GraphMLTreeNode, Graph.NodeName + ' ' + Graph.Id);
      for J := 0 to Graph.Node.Count - 1 do
      begin
        Node := Graph.Node.Items[J];
        NodeTreeNode := TreeView1.Items.AddChild(GraphTreeNode, Node.NodeName + ' ' + Node.Id);
        for L := 0 to Node.Data.Count - 1 do
        begin
          Data := Node.Data.Items[L];
          TreeView1.Items.AddChild(NodeTreeNode, Data.NodeName + ' ' + Data.Key + ': ' + Data.NodeValue);
        end;
      end;
    end;
  finally
    TreeView1.FullExpand;
    TreeView1.Items.EndUpdate;
  end;
end;
Angehängte Dateien
Dateityp: zip GraphMLTest.zip (9,3 KB, 16x aufgerufen)

Geändert von TiGü (27. Feb 2020 um 14:39 Uhr)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verwendung XML databinding wizard

  Alt 27. Feb 2020, 18:50
Danke für das Beispiel; Anbei der Code zum schreiben einer XML Datei, ein Graph mit 20 Knoten und die Knoten jeweils mit 2 Ecken verbunden :

Delphi-Quellcode:
var
  I, J, L: Integer;
  Graphml: IXMLGraphmltype;
  Graph: IXMLGraphtype;
  Node: IXMLNodetype;
  Data: IXMLDatatype;
  XMLDoc: IXMLDocument;
  Newkey: IXMLKeytype;
  NewNode: IXMLNode;
  NewEdge : IXMLEdgetype;


begin

  /// erzeuge eine einfache graphml / XML Datei

  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.Active := True;
  Graphml := Newgraphml;

  i:=1;
  Newkey := Graphml.Key.Add;
  Newkey.Id := 'KEY'+IntToStr(I);
  Newkey.For_ := 'egde';

  i:=2;
  Newkey := Graphml.Key.Add;
  Newkey.Id := 'KEY'+IntToStr(I);
  Newkey.For_ := 'node';

  for I := 1 to 20 do
  begin

    NewNode := Graphml.Graph.Add.Node.Add;

    NewNode.Attributes['name'] := 'node' + IntTostr(i);


  end;



  for I := 1 to 19 do
  begin

    NewEdge := Graphml.Graph.Add.Edge.Add;

    NewEdge.Attributes['name'] := 'edge' + IntTostr(i);

    NewEdge.Source := 'node' + IntTostr(i);

    NewEdge.Target := 'node' + IntTostr(i+1);

  end;


    NewEdge := Graphml.Graph.Add.Edge.Add;

    NewEdge.Attributes['name'] := 'edge' + IntTostr(i);

    NewEdge.Source := 'node' + IntTostr(20);

    NewEdge.Target := 'node' + IntTostr(1);



  mmo1.Text := Graphml.Xml;
  XMLDoc.xml.SaveToFile('e:\test.xml');



  mmo1.lines.SaveToFile('e:\test_lib.graphml');
end;


OK, ich bekomme jetzt eine XML Datei, wenn ich das memo abspeichere.
Der aktuelle Fehler liegt aber in der Struktur der XML Datei. um jede Node oder Edge wird ein Begin/End <graph> Tag geschrieben, dies ist natürlich so falsch, wie kann man diesen Fehler beheben ??

Delphi-Quellcode:
<graphml><key id="KEY1" for="egde"/><key id="KEY2" for="node"/>

<graph>

<node name="node1"/>[B]</graph><graph>[/B]<node name="node2"/>[B]</graph><graph>[/B]
<node name="node3"/>[B]</graph><graph>[/B]<node name="node4"/>[B]</graph><graph>[/B]<node name="node5"/>

Geändert von bernhard_LA (28. Feb 2020 um 09:47 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Verwendung XML databinding wizard

  Alt 28. Feb 2020, 11:32
Zitat:
Der aktuelle Fehler liegt aber in der Struktur der XML Datei. um jede Node oder Edge wird ein Begin/End <graph> Tag geschrieben, dies ist natürlich so falsch, wie kann man diesen Fehler beheben ??
Schau doch mal, was da genau bei Graphml.Graph.Add.Node.Add; und Graphml.Graph.Add.Edge.Add; passiert.

Wenn du nur einmal den Node "graph" haben willst, solltest du auch nur einmal Graphml.Graph.Add aufrufen und das Result davon in eine Zwischenvariable abspeichern.
Da würde sich die dritte Zeile in der Variablendeklaration für anbieten (Graph: IXMLGraphtype;)
  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 15:56 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