![]() |
XML malwieder
Hi,
eher ist das eine Theoriefrage: Ich habe eine XML-Datei, die die Lektion, deutsche Vokabel und die lateinische Vokabel enthält. In einer Funktion soll eine zufällige Vokabel aus einer/mehreren Lektionen geladen zurückgegeben wird... Wie soll ich das machen? Chris |
Mal angenommen, Deine Datei sieht wie folgt aus (dt/eng):
Code:
dann würde folgender Code helfen (FXMLDoc: IXMLDOMDocument2; Deine XML Datei)
<vokabeln>
<pair><dt>ich</dt><en>I</en></dt></pair> <pair><dt>du</dt><en>you</en></dt></pair> <pair><dt>er</dt><en>he</en></dt></pair> <pair><dt>sie</dt><en>she</en></dt></pair> <pair><dt>es</dt><en>it</en></dt></pair> </vokabeln>
Code:
...:cat:...
procedure NextPair(var Deutsch, Englisch: AnsiString);
var XMLPair: IXMLDOMNode; begin with FXMLDoc.documentElement do XMLPair := childNodes.item[Random(childNodes.length)]; with XMLPair do begin Deutsch := selectSingleNode('dt').text; Englisch := selectSingleNode('dt').text; end; end; |
Das Problem sind aber die Lektionen... Denn es sollen nur eine Vokabel aus einer bestimmten/aus bestimmten Lektionen zurückgegeben werden. Derzeit habe ich die Lektionen in einem Array of Integer gespeichert...
Chris |
Sorry, ich war das Wochenende über mit dem Team trainieren - bin erst jetzt wieder zurück.
Wie ist denn die XML Datei aufgebaut, wie werden die anderen Daten gehalten, dann können wir von dort weiter machen - ansonsten liefere ich auch nur Schüsse in den blauen Dunst ;) |
Also die Datei sieht so aus:
Code:
Dann beim Trainieren werden ersteinmal alle Lektionen in eine Listbox geschrieben. Dort wählt man dann eine oder mehrere aus (die nicht unbedingt hintereinander liegen). Tja, dann sollte eigentlich eine zufällige Vokabel aus einer dieser Lektionen in ein Record gespeichert werden, um diese dann mit der eingegebenen zu überprüfen.
<vokabeln>
<vokabel> <Deutsch>Schüler</Deutsch> <Latein>discipulus, -i m.</Latein> <Lektion>1</Lektion> </vokabel> </vokabeln> Dies zur Theorie. Das Problem habe ich ja bereits erläutert! Chris |
Dann machen wir es ähnlich:
Delphi-Quellcode:
...:cat:...
procedure NextPair(var Deutsch, Latein: AnsiString);
var I: Integer; XMLPair: IXMLDOMNode; XMLPairs: IXMLDOMNodeList; XSL: WideString; begin // alle Einträge der Listbox wählen, welche markiert sind (Text des Eintrags = Lektionsnummer) XSL := ''; for I := 0 to Pred(ListBox1.Items.Count) do if ListBox1.Selected[I] then XSL := XSL + ' or (Lektion="' + ListBox1.Items[I] + '")'; // führendes " or " entfernen Delete(XSL, 1, 4); // XML Nodes auswählen, welche zu den Lektionen gehören XMLPairs := FXMLDoc.documentElement.selectNodes('/vokabeln/vokabel[' + XSL + ']'); // weiter gehts... XMLPair := XMLPairs.item[Random(XMLPairs.length)]; with XMLPair do begin Deutsch := selectSingleNode('Deutsch').text; Latein := selectSingleNode('Latein').text; end; end; |
Hi sakura,
danke, aber leider hat der Debugger noch ein paar Krämpfe: Er bringt eine Exception an der Stelle:
Delphi-Quellcode:
Ich habe den Parameter auf var Vok: TVokabel geändert (zur Info, wo das Vok herkommt).
Vok.Deutsch := selectSingleNode('Deutsch').text;
Hat jemand eine Ahnung, woher die Exc. kommt? Chris |
Sei mal klug :mrgreen: und sage uns, was die Exception genau sagt, ausserdem poste mal die Definition der Klasse der Variabel VOK...
|
Ich bin klug und sage gleich, dass ich den Fehler gefunden habe: In der Anweisung stand vokabeln und es hätte eigentlich Vokabeln heißen müssen...
Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz