AGB  ·  Datenschutz  ·  Impressum  







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

[C#] Wie XML-Graph einlesen?

Ein Thema von jfheins · begonnen am 9. Aug 2009 · letzter Beitrag vom 9. Aug 2009
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

[C#] Wie XML-Graph einlesen?

  Alt 9. Aug 2009, 13:17
Hallo,
Ich stehe gerade vor dem Problem, einen Graphen aus einer XML-Struktur auszulesen.

Das Teil ist ein gerichteter, zyklenfreier Graph mit genau einer Quelle und einer Senke. Es gibt Kantengewichtungen (und einen ganzen Rattenschwanz an Infos zu jeder Kante)

Im XML sind Knoten und Kanten gespeichert:
XML-Code:
        <node>
            <id>1</id>
            <description>blablabla</description>
        </node>
.....
        <edge>
            <source_id>0</source_id>
            <target_id>1</target_id>
        </edge>
Meine erste Idee wäre, Klassen zu basteln, die sich genau so serialisieren/deserialisieren. Dann könnte man einfach nen XML-Deserializer verwenden und man bekommt den Graphen zurück.
Pferdefuß bei der Sache ist, dass ich eigentlich nicht die Knoten und Kanten jeweils in einer Liste haben will, sondern vielmehr den Graphen insgesamt.

Wobei ich mir auch nicht nicht ganz sicher bin, wie ich den Graphen am besten repräsentiere. Ich dachte da an eine Liste (in einem Objekt) dass die Knoten enthält, und die Knoten haben dann eine Liste mit Kanten oder so ...

Hat irgendwer ne Idee, wie man das am besten löst?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: [C#] Wie XML-Graph einlesen?

  Alt 9. Aug 2009, 15:18
Ich denke, da bist du mit LINQ 2 XML schneller am Ziel und brauchst vor allem kein "Zwischen-Model" des Graphen. So etwa:
Code:
class Node
{
   public IList<Edge> Edges { get; private set; }
   public string Description { get; set; }

   public Node()
   {
      Edges = new List<Edge>();
   }
}

class Edge
{
   //public Node Source { get; set; } //?
   public Node Target { get; set; }
   ...
}

var root = XElement.Load(...);
var nodes = new Dictionary<int, Node>();

foreach (XElement nodeEl in root.Elements("node"))
   nodes.Add((int)nodeEl.Element("id"), new Node {
      Description = nodeEl.Element("description").Value
   });

foreach (XElement edgeEl in root.Elements("edge"))
   nodes[(int)edgeEl.Element("source_id")].Edges.Add(new Edge {
      Target = nodes[(int)edgeEl.Element("source_id")],
      ...
   };
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: [C#] Wie XML-Graph einlesen?

  Alt 9. Aug 2009, 17:17
Danke, damit komme ich erstmal zurecht

Hab' jetzt erstmal die Klassen erstellt:

Eine Oberklasse, die bekommt den Dateinamen und liest eineige Daten aus, die noch vor dem Graphen kommen und
eine Klasse "Graph" mit 3 Listen für die Ecken, die Kanten und die Zusatzinfos (auch jeweils eigene Klassen)
bis auf die erste haben alle einen Kontruktor der ein XElement entgegen nimmt und sich daraus aufbaut.

Habs noch nicht ausprobiert, aber bis jetzt sieht das logisch, einfach und robust aus
  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 16:59 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