AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

suche in xml

Ein Thema von mav · begonnen am 22. Mär 2005 · letzter Beitrag vom 29. Mär 2005
Antwort Antwort
Seite 2 von 3     12 3   
MathiasSimmack
(Gast)

n/a Beiträge
 
#11

Re: suche in xml

  Alt 23. Mär 2005, 15:11
Aha. Na ja, dann mach´s wie ich vorgeschlagen habe:
Code:
/tester_db/tester/name
mit "selectNodes", und du hast alle (wenn es mehrere sind) Namen in IXMLDOMNodeList. Den Rest machst du wie vorgeschlagen in einer Schleife.
  Mit Zitat antworten Zitat
mav

Registriert seit: 8. Jan 2004
98 Beiträge
 
Delphi 7 Personal
 
#12

Re: suche in xml

  Alt 23. Mär 2005, 16:12
ok.. dein vorschlag hört sich logisch an.. funktioniert aber bei mir noch nicht ganz

Delphi-Quellcode:
nl:= xmldoc.documentElement.selectNodes('tester_db/tester/name');

for i := 0 to nl.length - 1 do begin

if lowercase(nl.item[i].nodeValue) = lowercase(LabeledEdit1.Text) then

    subNode := nl.item[i].selectSingleNode('id');
    ListView1.Items.Add;
    ListView1.Items[i].Caption := subNode.text;
    with ListView1.Items[i].SubItems do begin
      subNode := nl.item[i].selectSingleNode('name');
      if subNode <> nil then
        Add(subNode.text);
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: suche in xml

  Alt 23. Mär 2005, 16:31
Zitat:
funktioniert noch nicht so ganz
ist immer eine super Fehlerbeschreibung, insbesondere dann, wenn man nicht sagt, was man eigentlich erreichen will. Ausgehend von deinem Code müsste die Datei so aussehen:
XML-Code:
<tester_db>
  <tester>
    <name>
      Thomas
      <name>?</name>
      <id>?</id>
    </name>
  </tester>
</tester_db>
Tut sie aber bestimmt nicht. Bitte beachte, dass du dich mit der XPath-Anweisung
Code:
/tester_db/tester/name
auf der Ebene von <name> befindest. Das jeweilige Item in "nl.item[i]" entspricht also dem <name>-Knoten, und du suchst mit deinem Code dort jetzt untergeordnete <id>- und <name>-Knoten. Ohne Nachgucken ist es etwas schwierig (weil aus dem Kopf), aber es müsste eine "parentNode"-Eigenschaft geben, die auf den übergeordneten <tester>-Knoten verweist. Benutze den, und dein Code sollte funktionieren.

Nebenbei vermisse ich nach der if-Prüfung das begin/end, denn wenn der Name identisch ist, dann sollen sicher alle der nachfolgenden Anweisungen ausgeführt werden, und nicht nur
Zitat:
Delphi-Quellcode:
if lowercase(nl.item[i].nodeValue) = lowercase(LabeledEdit1.Text) then

  subNode := nl.item[i].selectSingleNode('id');
Oder?
  Mit Zitat antworten Zitat
mav

Registriert seit: 8. Jan 2004
98 Beiträge
 
Delphi 7 Personal
 
#14

Re: suche in xml

  Alt 23. Mär 2005, 17:16
ok.. die genau fehler beschreibung heisst..

"Variante des Typs (NULL) konnte nicht in den Typ (String) konvertiert werden."

und der Fehler weist auf folgende zeile hin

if lowercase(nl.item[i].nodeValue) = lowercase(LabeledEdit1.Text) then begin das ganze sieht jetzt so aus...

Delphi-Quellcode:
nl:= xmldoc.documentElement.selectNodes('/movies_db/mov/name');

for i := 0 to nl.length - 1 do begin
ListView1.Items.BeginUpdate;
ListView1.Clear;
if lowercase(nl.item[i].nodeValue) = lowercase(LabeledEdit1.Text) then begin
MessageDlg('Eintrag gefunden', mtConfirmation, [mbYes,mbNo], 0);
end;

ListView1.Items.EndUpdate;
end;
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#15

Re: suche in xml

  Alt 23. Mär 2005, 19:27
Hast du das Platform SDK auf der Platte? Oder die Hilfedatei, die bei MS-XML dabei war? Dann schau dir mal die Angaben zu nodeValue von MSDN-Library durchsuchenIXMLDOMNode an. Und versuch dein Glück stattdessen mal mit text bzw. Get_text.

Und, äh, ...
Delphi-Quellcode:
ListView1.Items.BeginUpdate;
ListView1.Clear;
solltest du nicht in der Schleife drin haben.
  Mit Zitat antworten Zitat
mav

Registriert seit: 8. Jan 2004
98 Beiträge
 
Delphi 7 Personal
 
#16

Re: suche in xml

  Alt 24. Mär 2005, 11:25
so.. nach langem hin und her hab ich jetzt mal dieses hier versucht..

Delphi-Quellcode:
begin
ListView1.Items.BeginUpdate;
ListView1.Clear;

nl:= xmldoc.documentElement.selectNodes('mov');
for i := 0 to nl.length - 1 do begin
subNode := nl.item[i].selectSingleNode('id');
    ListView1.Items.Add;
    ListView1.Items[i].Caption := subNode.text;
    with ListView1.Items[i].SubItems do begin
      subNode := nl.item[i].selectSingleNode('name');
      if lowercase(subNode.text) = lowercase(LabeledEdit1.Text) then
        Add(subNode.text);
end;
end;
ListView1.Items.EndUpdate;
end;
jedoch überschreited jetzt der listenindex max.(5) und ich finde den fehler nicht
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#17

Re: suche in xml

  Alt 24. Mär 2005, 11:37
Ich kann dir irgendwie nicht folgen, weil du auch ständig dein XML-Format änderst. Mal <tester_db>, jetzt wieder <mov_db>, dann nur noch <mov> ...


Dein Problem mit der List-View lässt sich wie folgt lösen:
Delphi-Quellcode:
lvi := ListView1.Items.Add;
lvi.Caption := subNode.Text;
lvi.SubItems.(blablabla);
Spricht irgendwas gegen die Verwendung einer TListItem-Variablen? Ich meine, so viel größer wird sie dein Programm nicht machen.
  Mit Zitat antworten Zitat
mav

Registriert seit: 8. Jan 2004
98 Beiträge
 
Delphi 7 Personal
 
#18

Re: suche in xml

  Alt 24. Mär 2005, 13:24
entschuldige die verwirrung
wollte eigendlich nur einfachere beispiele verwenden

naja.. funzt ned.. ich lass es.. muss einen anderen weg finden

thx für die hilfe.. echt cool die hilfe von dir mathias
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#19

Re: suche in xml

  Alt 24. Mär 2005, 14:29
So schwer ist das aber gar nicht (s. Anhang).
Guck ob dir das irgendwie hilft.

Preisfrage: Woher stammt der Name der Funktion, die für die Suche zuständig ist, und wie müsste der richtige Suchbegriff lauten?
Angehängte Dateien
Dateityp: zip simplesample_203.zip (1,7 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
mav

Registriert seit: 8. Jan 2004
98 Beiträge
 
Delphi 7 Personal
 
#20

Re: suche in xml

  Alt 29. Mär 2005, 00:48
jo.. das ganze ist gut.. jedoch hab ich jetzt wieder den fehler, dass es mir nur extakte suchen ausgibt
daher verwendete ich zu begin contains
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:23 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