Laden...

XML-DB via SQL-Befehle "steuern"

Erstellt von Abt vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.703 Views
Abt Themenstarter:in
16.835 Beiträge seit 2008
vor 15 Jahren
XML-DB via SQL-Befehle "steuern"

verwendetes Datenbanksystem: XML

Hi,

eigentlich lese ich hier nur, bin nun aber auf eine Hürde gestoßen, auf die ich keine einfache Lösung finde.

Ich erstelle derzeit ein kleines Tool für das Verwalten von kleineren Turnieren, habe also eine Spielerdatenbank, Teamdatenbank und die dazugehörigen Ergebnisse der Vorrunde, Zwischenrunde und dem Finale.

Meine XML Struktur sieht wie folgt aus:


<TURNIERDATENBANK>
  <SETTINGS>
    <TITLE>Turniername</TITLE>
    <...>
  </SETTINGS>

  <SPIELERDB>
    <SPIELER ID="1">
      <VORNAME/>
      <NACHNAME/>
      <GEBURTSDATUM/>
    </SPIELER>
  </SPIELERDB>

  <EINZEL>
    <SPIELER ID="1">
      <VORRUNDE>
        <SPIEL ID=1/>
        <SPIEL ID=2/>
        <SPIEL ID=3/>
      </VORRUNDE>
      <ZWISCHENRUNDE>
        <SPIEL ID=1/>
        <SPIEL ID=2/>
        <SPIEL ID=3/>
      </ZWISCHENRUNDE>
    </SPIELER
  </EINZEL>
</TURNIERDATENBANK>

Jedenfalls möchte ich die Ergebnisverwaltung so einfach wie auch nur möglich gestalten und ebenso die Abfrage.
Ich habe nun die letzten Tage damit verbracht mich mit System.XML auseinanderszusetzen, genauso wie Forenbeiträge zu lesen, herauszufinden, dass die direkte Ansprache ( vor allem auf dynamische Art und Weise ) nicht ganz so einfach ist und DataSets auch nicht das Gelbe vom Ei sind.

Gibt es vielleicht eine Möglichkeit, dies via SQL-Befehle ( meinetwegen über ODBC ) zu realisieren, und wenn ja hat mir jemand nen Beispiel, ne Klasse oder nen Tutorial? ( Letzteres wäre mir am Liebsten, damit ich weiß was man genau machen muss / benötigt ).

Wünschenswert wäre es, es über Befehle wie

int Game_1 = SQL(SELECT SPIEL FROM EINZEL WHERE GAMENUMBER=1 AND PLAYER_ID=1 AND ROUND=VORRUNDE);

Grüße vom Abt

Gelöschter Account
vor 15 Jahren

ich sehe 2 möglichkeiten:

  1. linq2xml: das ist eine sql-ähnliche syntax und man kann sie (soweit ich weiß) auch für xml einsetzen.
  2. in ein xmlDocument einlesen und mit xpath/foreach arbeiten.
Abt Themenstarter:in
16.835 Beiträge seit 2008
vor 15 Jahren

Hallo JAck30lena,

danke für Deine Antwort.
Ich werde mir das Thema linq2sql einmal anschauen - weitere, SQL-nahe Vorschläge nehme ich natürlich weiter gerne an.

Grüße Abt

Gelöschter Account
vor 15 Jahren

Ich werde mir das Thema linq2sql einmal anschauen -

hrhr 🙂 les dir nochmal punkt eins durch^^

Abt Themenstarter:in
16.835 Beiträge seit 2008
vor 15 Jahren

Ja, mein ich doch 😉

F
101 Beiträge seit 2007
vor 15 Jahren

ich glaub mit nem XPathDocument kannst du nen Stream direkt auf den einzelnen Nodes setzen:

System.Xml.XPath.XPathDocument doc = new ...();
doc.CreateNavigator().Select(...);
Abt Themenstarter:in
16.835 Beiträge seit 2008
vor 15 Jahren

Aber habe ich die Möglichkeit hier eine Selectabfrage auch nach Attributen zu gestalten?

Ein kurzes Beispiel wäre sehr nett.

C
401 Beiträge seit 2007
vor 15 Jahren

Klar geht das:

Mit XmlDocument:



XmlNodeList nodes = doc.SelectNodes("//Root/Child[@Attribute=Value or @Attribute2=Value2]");


Mit XPathDocument:



XPathNodeIterator it = doc.CreateNavigator().Select("//Root/Child[@Attribute=Value or @Attribute2=Value2]");


edit: beim zweiten Attribute das @ vergessen peinlich 😁