Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Hilfe beim ersten XML Versuch! (https://www.delphipraxis.net/147649-hilfe-beim-ersten-xml-versuch.html)

Novo 13. Feb 2010 01:25


Hilfe beim ersten XML Versuch!
 
Hallo,
dies ist mein erster XML Versuch, und ich habe es zumindest schonmal ansatzweise geschafft, das zumindest ETWAS angezeigt wird xD.

Anscheinend selbes Problem wie:
http://www.delphipraxis.net/internal...t.php?t=168824

und zwar benutze ich die Delphi eigene TXMLDocument Komponente.
Auslesen möchte ich eine API XML:

Vereinfacht:
Code:
<words>
  <word>
    <navi id="850">'ampi</navi>
    <syllabic/>
    <wordclass id="1">1</wordclass>
    <ipa>&#660;am.pi</ipa>
    <lastmodified>20100128181420</lastmodified>
    <translations id="11">
      <translate>Berührung, die</translate>
    </translations>
  </word>
  <word>
    ...
  </word>
 ...
<words>
Das herunterladen klappt, nun gehts ans auslesen:
Code:
procedure btnClick(Sender: TObject);
var
  ADPLocalFile : TFileName;
  StartItemNode : IXMLNode;
  ANode : IXMLNode;
  s1, s2, s3 : widestring;
begin
  ADPLocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.xml';

  try
    XMLDoc.FileName := ADPLocalFile;
    XMLDoc.Active:=True;

    StartItemNode:=XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('word');
    ANode := StartItemNode;

    repeat
      s1 := ANode.ChildNodes['navi'].Text;
      s2 := ANode.ChildNodes['ipa'].Text;
      s3 := ANode.ChildNodes['translate'].Text;

      with LV.Items.Add do
      begin
        Caption := s1;
        SubItems.Add(s2);
        SubItems.Add(s3)
      end;

      ANode := ANode.NextSibling;
    until ANode = nil;

  finally
    DeleteFile(ADPLocalFile);
  end;
end;
Leider bekomme ich eine Zugriffsverletzung :(
Wenn ich den StartItemNode z.B. in "navi" ändere, dann wird zwischendrin 1 Wort ausgelesen, aber
das soll ja nicht der Startwert sein. :wiejetzt:

Was hab ich da falsch?
Habe mir beispiele angeschaut, die sind so wie in meinem Code!


EDIT:
WTF es ist
2.30Uhr und ich :cheers: und :coder: wie ein Wahnsinniger.


Mfg Novo

Aphton 13. Feb 2010 03:26

Re: Hilfe beim ersten XML Versuch!
 
Du bist nicht allein, glaub an dich, du schaffst das...
*Nickweg

s.h.a.r.k 13. Feb 2010 06:34

Re: Hilfe beim ersten XML Versuch!
 
Guten Morgen,

sollen wir erraten wo denn die Exception geworfen wird? Ich glaube aber den Fehler gefunden zu haben:

Code:
StartItemNode := XMLDoc.DocumentElement
                       .ChildNodes       // <words></words>
                       .First            // <word></word>
                       .ChildNodes       // <navi> bis zu >translation>
                       .FindNode('word'); // <word> GIBTS NICHT! -> Fehlende Prüfung auf NIL
Warum hast du eigentlich diese Zuweisung? :gruebel: Wohl zu viel RAM übrig? :zwinker:
Delphi-Quellcode:
StartItemNode:=XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('word');
ANode := StartItemNode;

Novo 13. Feb 2010 19:38

Re: Hilfe beim ersten XML Versuch!
 
Zitat:

Zitat von s.h.a.r.k
Guten Morgen,

sollen wir erraten wo denn die Exception geworfen wird? Ich glaube aber den Fehler gefunden zu haben:

Code:
StartItemNode := XMLDoc.DocumentElement
                       .ChildNodes       // <words></words>
                       .First            // <word></word>
                       .ChildNodes       // <navi> bis zu >translation>
                       .FindNode('word'); // <word> GIBTS NICHT! -> Fehlende Prüfung auf NIL
Warum hast du eigentlich diese Zuweisung? :gruebel: Wohl zu viel RAM übrig? :zwinker:
Delphi-Quellcode:
StartItemNode:=XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('word');
ANode := StartItemNode;

Hey :)
Die Exception wird geworfen, wenn .FindNode('word'); ist und das an dieser stelle:
s1 := ANode.ChildNodes['navi'].Text;

Warum sollte es word nicht geben? Schau mal in meinem XML Beispiel oben!
gibt es nicht so: for each <word> in <words> do <word>.<navi> und <word>.ipa usw.?


PS:
Meinen bisherigen Code habe ich mir hier abgeschaut:
http://delphi.about.com/od/interneti...rss_read_3.htm

Und wiso zuviel ram übrig xD?


EDIT:
Und dann seh ich noch ein problem auf mich zukommen:
Code:
<translations id="xxx">
  <translate>1 (Oktal)</translate>
  <translate>eins</translate>
  <translate>xxx</translate>
</translations>

sind mal 1 mal 2 mal 3 translations ...

himitsu 13. Feb 2010 20:18

Re: Hilfe beim ersten XML Versuch!
 
Zitat:

Zitat von Novo
EDIT:
Und dann seh ich noch ein problem auf mich zukommen:

http://www.delphipraxis.net/internal...&highlight=xml

Novo 23. Feb 2010 09:26

Re: Hilfe beim ersten XML Versuch!
 
mööh klappt alles iwie nicht :(

generic 23. Feb 2010 10:03

Re: Hilfe beim ersten XML Versuch!
 
Das XML ist nicht gültig. Die HTML Sonderzeichen gehören in den Knoten kodiert.

Zitat:

'ampi
Da gehört das ' enkodiert.

http://en.wikipedia.org/wiki/List_of...ntities_in_XML
http://xml.silmaril.ie/authors/specials/

Novo 25. Feb 2010 15:02

Re: Hilfe beim ersten XML Versuch!
 
Zitat:

Zitat von generic
Das XML ist nicht gültig. Die HTML Sonderzeichen gehören in den Knoten kodiert.

Zitat:

'ampi
Da gehört das ' enkodiert.

http://en.wikipedia.org/wiki/List_of...ntities_in_XML
http://xml.silmaril.ie/authors/specials/

versteh ich nicht.
das ist doch der string, der ausgelesen werden soll ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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