Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# XML Quiz erstellen
max_0512
myCSharp.de - Member



Dabei seit:
Beiträge: 1

Themenstarter:

C# XML Quiz erstellen

beantworten | zitieren | melden

verwendetes Datenbanksystem: <XML>

Hallo.. ich habe in der Schule die Aufgabe bekommen ein Quiz zu erstellen. Es soll eine Quizfrage mit 2-6 Antwortmöglichkeiten geben, die Frage soll außerdem eine Kategorie haben. Also habe ich mir gedacht, alle Fragen einer Kategorie in ein XML-File zu speichern!

Folgende Überlegung

<xmlfile>
	<Frage1>
                    <Frage>Hier kommt die erste Frage hin!<Frage>
	           <A1 true ="true">ja</A1>
	           <A2>ja</A2>
	           <A3>ja</A3>
	           <A4>nein</A4>
	          <A5>nein</A5>
	          <A6>nein</A6>
	</Frage1>
         <Frage2>
              .........
         </Frage2>
</xmlfile>

Jedoch bekomme ich es leider nicht hin, dieses Format mittels C# zu speichern.. Wäre für jede Hilfe sehr dankbar.
--Mein größtes Problem ist die Erstellung von Untergeordneten Datensätzen..Also Dass in <frage> dann <a1>...<a6> steht, und dann erst </frage> wieder zu geht!

mfg
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

zuerst wird die Aufgabe keiner für dich übernehmen - wir setzen Grundwissen voraus.

Damit du nicht leer ausgehst: Lies dich mal in Linq2Xml ein, mach 1-2 Tutorials - dann ist das ein Kinderspiel.

LG

PS: Ein Xml-File je Kategorie halt ich für unnötig... Nimm doch einfach ein Attribut bei den Fragen.
(So viele werden es bestimmt nicht, als dass mehr wie ein File sinnvoll sein könnte...)
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

Hallo max_0512,

ich würde mir auch an deiner Stelle nochmal Gedanken über die XML-Struktur machen. Hier findest Du eine kleine Beschreibung zum XML Grundaufbau. Hier noch etwas inhaltliches zu XML Datenmodellierung und XML-Schemasprachen.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1455
Herkunft: Düsseldorf

beantworten | zitieren | melden

Warum erstellst du nicht einfach eine Klasse für die Fragen:

public class Frage
{
    public string Text {get; set; }
    public Dictionary<char, Antwort> Antworten { get; set; }
    public Kategorie Kategorie { get; set; }

    public Frage()
    {
        Antworten = new XmlSerializableDictionary<char, Antwort>();
    }
}

Die Klasse Antwort:

public class Antwort
{
    public string Text { get; set; }
    public bool Wahr { get; set; }
}

Die Klasse Kategorie:

public class Kategorie
{
    public string Name { get; set; }
}

Und hier alle Fragen auf einem Schlag:

public class AlleFragen
{
    public List<Frage> Fragen { get; set; }

    public AlleFragen()
    {
        Fragen = new List<Frage>();
    }
}

Und dann schreibst du noch eine Klasse, die dafür zuständig ist, Alle Fragen aus einer Datei zu laden oder in eine Datei zu speichern.
Und das machst du mit diesem Prinzip:

Einfache XML-Serialisierung in C#

Allerdings kann Xml das Dictionary von Haus aus nicht serialisieren, daher musst du ein serialisierbares Dictionary nehmen. Über Google findet man da folgendes:

SerializableDictionary using IXmlSerializable

Da kannst du einen String lesen oder in einen String schreiben und der steht dann halt in der Datei.





Solange du kein XML-Dokument analysieren musst und es eigentlich nur um simples Laden oder Speichern geht, brauchst du kein LINQ to XML, das geht viel einfacher.

Das oben ist auch nicht das fertige Ergebnis, das du dann einbauen kannst, das habe ich nur schnell und ungetestet hier rein geschrieben um kurz zu veranschaulichen, wie es sehr einfach geht, sowas via XML zu handhaben.

Ob das ganze Konstrukt auch so sinnvoll, bezweifle ich, es gibt bestimmt klügere Herangehensweisen, aber ich finde, um zu zeigen, wie man schnell und einfach via XML serialisieren kann, reicht das völlig aus.

Auch die Variante mit dem Dictionary in der Klasse Frage kannst du umbauen. Das habe ich deshalb gemacht, weil du so dann flexibel die Antwortmöglichkeiten einstellen kannst und zu jeder Antwort wird gleich noch der Buchstabe zugeordnet, den der Nutzer dann als Antwort angeben kann.


Soll heißen:
Schau dir das an, schau es durch, verstehe was da passiert und mach dir dann nochmal Gedanken, ob du das so nutzen kannst, oder wie du es am besten einsetzt.

Die XML-Datei ist dann vielleicht nicht unbedingt schön, weil du z.B. für das Dictionary noch so Dinger wie Key und Value drin stehen hast, oder andere Namen, wo du nicht wirklich weißt, was das sein soll, aber dafür ist es vom Code aus viel leichter zu handhaben und schnell implementiert.

Schau dir auch mal genau an, wie das Dictionary serialisierbar gemacht wurde. Ich halte das für eine weit angenehmere Art, spezifisch zu serialisieren, da so auch private Variablen einer Klasse beachtet werden können.



Gruß



PS:
Das Stichwort heißt Serialisierung. Das Wort habe ich vorher schon öffters benutzt:
Serialisierung

Such dann einfach nach c# Xml Serialisierung, da findest du bestimmt Einiges zum Thema.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers