AGB  ·  Datenschutz  ·  Impressum  







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

XML malwieder

Ein Thema von CalganX · begonnen am 22. Nov 2002 · letzter Beitrag vom 25. Nov 2002
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

XML malwieder

  Alt 22. Nov 2002, 16:43
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 22. Nov 2002, 16: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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 22. Nov 2002, 17: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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 25. Nov 2002, 10: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
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 25. Nov 2002, 12: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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 25. Nov 2002, 13: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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 25. Nov 2002, 15:40
Hi sakura,
danke, aber leider hat der Debugger noch ein paar Krämpfe: Er bringt eine Exception an der Stelle:

    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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 25. Nov 2002, 15:49
Sei mal klug und sage uns, was die Exception genau sagt, ausserdem poste mal die Definition der Klasse der Variabel VOK...
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9
  Alt 25. Nov 2002, 15: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
  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 22:41 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