Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
Delphi 11 Alexandria
|
AW: graphml format - Erzeugen von Graphen-files mit Delphi
28. Feb 2020, 14:37
ohne Verwendung des XML Databinding sieht meine aktuelle Lösung wie folgt aus:
Delphi-Quellcode:
var
i: Integer;
ColorstringList: TStringList;
LDocument: IXMLDocument;
LNodeElement, LGRAPHelement , ChildnodeElement, LSubNodeElement, NodeText,
NodeCData: IXMLNode;
begin
///
///
///
ColorstringList := TStringList.Create;
ColorstringList.Add('green');
ColorstringList.Add('blue');
ColorstringList.Add('red');
ColorstringList.Add('white');
ColorstringList.Add('purple');
ColorstringList.Add('green');
ColorstringList.Add('blue');
ColorstringList.Add('red');
ColorstringList.Add('white');
ColorstringList.Add('purple');
ColorstringList.Add('green');
ColorstringList.Add('blue');
ColorstringList.Add('red');
ColorstringList.Add('white');
ColorstringList.Add('purple');
LDocument := TXMLDocument.Create(nil);
LDocument.Active := True;
{ Define document content. }
LDocument.DocumentElement := LDocument.CreateNode('graphml', ntElement, '');
LDocument.DocumentElement.Attributes['xmlns'] :=
'http://graphml.graphdrawing.org/xmlns';
LDocument.DocumentElement.Attributes['xmlns:xsi'] :=
'http://www.w3.org/2001/XMLSchema-instance';
///
/// <key id="d0" for="node" attr.name="color" attr.type="string"> <default>yellow</default>
/// </key> <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
///
LNodeElement := LDocument.DocumentElement.AddChild('key', -1);
LNodeElement.Attributes['id'] := 'key' + IntToStr(1);
LNodeElement.Attributes['for'] := 'node';
LNodeElement.Attributes['attr.name'] := 'color';
LNodeElement.Attributes['attr.type'] := 'string';
LNodeElement := LDocument.DocumentElement.AddChild('key', -1);
LNodeElement.Attributes['id'] := 'key' + IntToStr(2);
LNodeElement.Attributes['for'] := 'edge';
LNodeElement.Attributes['attr.name'] := 'weight';
LNodeElement.Attributes['attr.type'] := 'double';
LGRAPHelement := LDocument.DocumentElement.AddChild('graph', -1);
LGRAPHelement.Attributes['id'] := 'GRAPH';
LGRAPHelement.Attributes['edgedefault'] := 'undirected';
for i := 1 to 10 do
begin
LSubNodeElement := LGRAPHelement.AddChild('node', -1);
LSubNodeElement.Attributes['id'] := 'N' + IntToStr(i);
/// <data key="d0">green</data>
ChildnodeElement := LSubNodeElement.AddChild('data');
ChildnodeElement.Attributes['key']:='key1';
ChildnodeElement.Text := ColorstringList[i];
end;
for i := 1 to 9 do
begin
LSubNodeElement := LGRAPHelement.AddChild('edge', -1);
LSubNodeElement.Attributes['id'] := 'E' + IntToStr(i);
LSubNodeElement.Attributes['source'] := 'N' + IntToStr(i);
LSubNodeElement.Attributes['target'] := 'N' + IntToStr(i + 1);
// <data key="d0">green</data>
ChildnodeElement := LSubNodeElement.AddChild('data');
ChildnodeElement.Attributes['key']:='key2';
ChildnodeElement.Text := IntToStr(Random(5)+1);
end;
LSubNodeElement := LGRAPHelement.AddChild('edge', -1);
LSubNodeElement.Attributes['id'] := 'E' + IntToStr(10);
LSubNodeElement.Attributes['source'] := 'N' + IntToStr(10);
LSubNodeElement.Attributes['target'] := 'N' + IntToStr(1);
// <data key="d0">green</data>
ChildnodeElement := LSubNodeElement.AddChild('data');
ChildnodeElement.Attributes['key']:='key2';
ChildnodeElement.Text := '1';
LDocument.SaveToFile('e:\testxmlgraph.graphml');
LDocument.SaveToFile('e:\testxmlgraph1.txt');
LDocument.SaveToFile('e:\testxmlgraph2.xml');
redt1.Lines.LoadFromFile('e:\testxmlgraph1.txt');
end;
Geändert von bernhard_LA (28. Feb 2020 um 16:28 Uhr)
|
|
Zitat
|