wer Daten in einer strukturierten Form als Grafik anzeigen lassen will, der kann sich ja mal DOT anschauen.
Hier ein kleines Beispiel, wie sich eine XML-Struktur in DOT konvertieren und als Grafik anzeigen lässt:Wikipedia hat geschrieben:DOT ist eine einfach gehaltene, aber mächtige Beschreibungssprache für die visuelle Darstellung von Graphen. Mit DOT lässt sich die Struktur eines gerichteten oder ungerichteten Graphen beschreiben. Außerdem besitzt DOT auch Sprachelemente, um die Visualisierung eines Graphen zu steuern. Zum Beispiel lassen sich Form und Farbe der Knoten und der Kanten festlegen. [...]
(Quelle: https://de.wikipedia.org/wiki/DOT_(GraphViz))
Code: Alles auswählen
EnableExplicit
; http://www.graphviz.org/
; https://de.wikipedia.org/wiki/DOT_(GraphViz)
Procedure.s ReadXmlStructure(Node)
Static ReturnValue.s
Protected ChildNode
Protected ChildXMLNodeName.s
Protected ParentXMLNodeName.s
ChildNode = ChildXMLNode(Node)
While ChildNode <> 0
If XMLNodeType(ParentXMLNode(ChildNode)) = #PB_XML_Normal
ParentXMLNodeName = GetXMLNodeName(ParentXMLNode(ChildNode))
EndIf
If XMLNodeType(ChildNode) = #PB_XML_Normal
ChildXMLNodeName = GetXMLNodeName(ChildNode)
EndIf
If ParentXMLNodeName <> "" And ChildXMLNodeName <> ""
ReturnValue + ParentXMLNodeName + " -> " + ChildXMLNodeName + ";" + #CRLF$
EndIf
If XMLChildCount(ChildNode)
ReadXmlStructure(ChildNode)
EndIf
ChildNode = NextXMLNode(ChildNode)
Wend
ProcedureReturn ReturnValue
EndProcedure
InitNetwork()
Define XmlStructure.s
Define TempXmlFileName.s
Define TempDotFileName.s
Define TempPngFileName.s
Define DotExe.s
Define FF, oXML
TempXmlFileName = GetTemporaryDirectory() + "dot.xml"
If ReceiveHTTPFile("http://www.w3schools.com/xml/cd_catalog.xml", TempXmlFileName)
oXML = LoadXML(#PB_Any, TempXmlFileName)
If oXML
If XMLStatus(oXML) = #PB_XML_Success
XmlStructure = ReadXmlStructure(RootXMLNode(oXML))
XmlStructure = RemoveString(XmlStructure, ".") ; DOT mag keine Punkte als Bezeichner?
XmlStructure = "strict digraph xml {" + #CRLF$ + "graph [rankdir=LR];" + XmlStructure + "}"
TempDotFileName = GetTemporaryDirectory() + "dot.dot"
TempPngFileName = GetTemporaryDirectory() + "dot.png"
FF = CreateFile(#PB_Any, TempDotFileName)
If FF
WriteString(FF, XmlStructure)
CloseFile(FF)
TempDotFileName = Chr(34) + TempDotFileName + Chr(34)
TempPngFileName = Chr(34) + TempPngFileName + Chr(34)
DotExe = "C:\Program Files (x86)\Graphviz\bin\dot.exe" ; Anpassen!
If RunProgram(DotExe, "-Tpng " + TempDotFileName + " -o " + TempPngFileName, "", #PB_Program_Wait | #PB_Program_Hide)
RunProgram(TempPngFileName)
Else
Debug "!RunProgram()"
EndIf
Else
Debug "!CreateFile()"
EndIf
Else
Debug "!XMLStatus()"
Debug XMLError(oXML)
EndIf
FreeXML(oXML)
Else
Debug "!oXML"
EndIf
Else
Debug "!ReceiveHTTPFile()"
EndIf
Bevor Ihr den Code laufen lasst: Graphviz unter http://www.graphviz.org/ herunterladen und installieren. dot.exe im bin-Ordner lokalisieren und den Pfad in DotExe vermerken.
So wird aus folgendem XML:
Code: Alles auswählen
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
[...]
dieses PNG:
Viel Spaß beim Experimentieren mit DOT!
// Edit: defekten Graphviz-Link korrigiert.