Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XML malwieder (https://www.delphipraxis.net/1400-xml-malwieder.html)

CalganX 22. Nov 2002 17:43


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

sakura 22. Nov 2002 17:52

Mal angenommen, Deine Datei sieht wie folgt aus (dt/eng):
Code:
<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>
dann würde folgender Code helfen (FXMLDoc: IXMLDOMDocument2; Deine XML Datei)
Code:
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;
...:cat:...

CalganX 22. Nov 2002 18:11

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

sakura 25. Nov 2002 11:43

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 ;)

CalganX 25. Nov 2002 13:54

Also die Datei sieht so aus:
Code:
<vokabeln>
 <vokabel>
  <Deutsch>Schüler</Deutsch>
  <Latein>discipulus, -i m.</Latein>
  <Lektion>1</Lektion>
 </vokabel>
</vokabeln>
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.

Dies zur Theorie. Das Problem habe ich ja bereits erläutert!

Chris

sakura 25. Nov 2002 14:05

Dann machen wir es ähnlich:
Delphi-Quellcode:
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;
...:cat:...

CalganX 25. Nov 2002 16:40

Hi sakura,
danke, aber leider hat der Debugger noch ein paar Krämpfe: Er bringt eine Exception an der Stelle:

Delphi-Quellcode:
    Vok.Deutsch := selectSingleNode('Deutsch').text;
Ich habe den Parameter auf var Vok: TVokabel geändert (zur Info, wo das Vok herkommt).

Hat jemand eine Ahnung, woher die Exc. kommt?

Chris

sakura 25. Nov 2002 16:49

Sei mal klug :mrgreen: und sage uns, was die Exception genau sagt, ausserdem poste mal die Definition der Klasse der Variabel VOK...

CalganX 25. Nov 2002 16:59

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