AGB  ·  Datenschutz  ·  Impressum  







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

Knoten finden

Ein Thema von Blackbird001 · begonnen am 21. Jun 2009 · letzter Beitrag vom 22. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#1

Knoten finden

  Alt 21. Jun 2009, 15:47
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 = 'BankAccountsthen
    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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Knoten finden

  Alt 21. Jun 2009, 15:53
versuch mal
Knotenliste.Nodes[1].ChildNodes.Nodes['BankAccounts'] außerdem müßte ChildNodes soetwas wie IndexOf kennen
$2B or not $2B
  Mit Zitat antworten Zitat
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#3

Re: Knoten finden

  Alt 21. Jun 2009, 15:56
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
  Mit Zitat antworten Zitat
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#4

Re: Knoten finden

  Alt 21. Jun 2009, 16:10
Leider funktioniert das auch nicht.

HAst du noch eine Idee bin schon am verzweifeln.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Knoten finden

  Alt 21. Jun 2009, 16:13
eigentlich sollte es gehn, da .Nodes einen Index oder NodeNamen entgegen nimmt
Zitat:
property Nodes[const IndexOrName: OleVariant]: IXMLNode;

i := Knotenliste.Nodes[1].ChildNodes.IndexOf('BankAccounts')
$2B or not $2B
  Mit Zitat antworten Zitat
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#6

Re: Knoten finden

  Alt 21. Jun 2009, 16:20
Also bekomme mit

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

Bekomme ich immer -1 zurück auch wenn es den Knoten nicht gibt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Knoten finden

  Alt 21. Jun 2009, 16:44
wie ist denn die XML aufgebaut?

falls die erste 1 ( Knotenliste.Nodes[1] ) auch unterschiedlich ist, dann wird es nicht so einfach.
$2B or not $2B
  Mit Zitat antworten Zitat
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#8

Re: Knoten finden

  Alt 21. Jun 2009, 17:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Knoten finden

  Alt 21. Jun 2009, 17:15
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.
fork me on Github
  Mit Zitat antworten Zitat
Blackbird001

Registriert seit: 21. Jun 2009
14 Beiträge
 
#10

Re: Knoten finden

  Alt 21. Jun 2009, 17:28
Und was ist wenn der Knoten nicht vorhanden ist? Und was bedeuten die beiden // bei BankAccounts?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:28 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