Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Knoten finden (https://www.delphipraxis.net/135979-knoten-finden.html)

Blackbird001 21. Jun 2009 14:47


Knoten finden
 
Hallo vielleicht könnt ihr mir bei einem Problem helfen.

Hier erst einmal der Code

Delphi-Quellcode:
if Knotenliste.Nodes[1].ChildNodes.Nodes[1].NodeName = 'BankAccounts' then
    begin
        Memo1.Lines.Add('************');
        if Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].HasAttribute('bankName') then begin
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['bankName']);
        end;
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['bankCode']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['eban']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['swift']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['accountNo']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['street']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['zip']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['city']);
        Memo1.Lines.Add(Knotenliste.Nodes[1].ChildNodes.Nodes[1].ChildNodes[0].Attributes['isoCountryCode']);
        Memo1.Lines.Add('************');

    end;
Die Sache ist, der Knoten BankAccounts befindet sich nicht immer an der selben Stelle, wie kann ich es lösen, das ich rausbekomme ob der Knoten vorhanden ist und an welcher Stelle und wie kann ich dann auf die Attribute zugreifen.

Könnt ihr mir vielleicht ein kleines Beispiel geben.

Vielen Dank.

himitsu 21. Jun 2009 14:53

Re: Knoten finden
 
versuch mal
Delphi-Quellcode:
Knotenliste.Nodes[1].ChildNodes.Nodes['BankAccounts']
außerdem müßte ChildNodes soetwas wie IndexOf kennen

Blackbird001 21. Jun 2009 14:56

Re: Knoten finden
 
Vielen Dank für die schnelle Antwort werde es gleich mal probieren.

Hast du ein Beispiel für Index of bin noch neu in xml

Vielen Dank

Blackbird001 21. Jun 2009 15:10

Re: Knoten finden
 
Leider funktioniert das auch nicht.

HAst du noch eine Idee bin schon am verzweifeln. :(

himitsu 21. Jun 2009 15:13

Re: Knoten finden
 
eigentlich sollte es gehn, da .Nodes einen Index oder NodeNamen entgegen nimmt
Zitat:

Delphi-Quellcode:
property Nodes[const IndexOrName: OleVariant]: IXMLNode;


Delphi-Quellcode:
i := Knotenliste.Nodes[1].ChildNodes.IndexOf('BankAccounts')

Blackbird001 21. Jun 2009 15:20

Re: Knoten finden
 
Also bekomme mit

KnotenListe.Nodes[1].ChildNodes.IndexOf('BankAccounts');

Bekomme ich immer -1 zurück auch wenn es den Knoten nicht gibt

himitsu 21. Jun 2009 15:44

Re: Knoten finden
 
wie ist denn die XML aufgebaut?

falls die erste 1 ( Knotenliste.Nodes[1] ) auch unterschiedlich ist, dann wird es nicht so einfach.

Blackbird001 21. Jun 2009 16:03

Re: Knoten finden
 
Also das mit BankAccounts konnte ich jetzt mit deiner Hilfe lösen, da das immer Knotenliste[1] sein muss.

Aber ich habe noch einen Knoten Artikle der innerhalb der Knotenliste auch an unterschiedlicher Stelle vorkommen kann. Wie kann ich rausfinden wo er ist.

Und den dann so ansprechen das ich die Attribute bekomme wo ich auch nicht weiß wo die dann genau stehen.

sx2008 21. Jun 2009 16:15

Re: Knoten finden
 
Da muss ich hier doch mal XPath in den Ring werfen.
Mit XPath ist das Lokalisieren der Knoten kein Problem - man braucht dann keine Schleifen für die Suche programmieren.
Beispiel:
Delphi-Quellcode:
nodelist := document.SelectNodes('//BankAccounts'); // findet all Elemente <BankAccounts>, egal auf welcher Ebene sie sind
for i := 0 to nodelist.length-1 do
begin
  elementnode := nodelist.Item[i] as IXMLDOMelement;
  ... := elementnode.GetAttribute('bankName');
end;
XPath ist wie eine neue Programmiersprache - mit dem Lernaufwand etwa mit SQL zu vergleichen.
Auf XPath zu verzichten wäre genau so wie auf SQL zu verzichten.

Blackbird001 21. Jun 2009 16:28

Re: Knoten finden
 
Und was ist wenn der Knoten nicht vorhanden ist? Und was bedeuten die beiden // bei BankAccounts?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 1 von 2  1 2      

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