Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi TXMLDocument ChildNodes, maximum 35? (https://www.delphipraxis.net/147677-txmldocument-childnodes-maximum-35-a.html)

schwa226 13. Feb 2010 22:59


TXMLDocument ChildNodes, maximum 35?
 
Hi,

steh hier vor einen Problem.

Ich habe diese Funktion:
Delphi-Quellcode:
XMLDocument.LoadFromFile('C:\MyTest.xml');

ChildNodes := XMLDocument.DocumentElement.ChildNodes;

If ChildNodes <> NIL then
begin

for i := 0 to ChildNodes.Count - 1 do
//do copy node:
Node := ChildNodes.Nodes[i];
If (Node <> NIL) and (Node.Attributes['name'] = 'Service') then
//do stuff

end;
Nun ist mein ChildNode.Count 39, aber bei i = 35 kommt die Meldung Listenindex überschreitet Maximum (35)?

Oder geht es auch einfacher aus den Childnodes diesen Node zu finden ohne eine For-Schleife?

Namenloser 14. Feb 2010 01:39

Re: TXMLDocument ChildNodes, maximum 35?
 
Nutzt du Klassen oder Interfaces? Versuch mal, alles was mit XML zu tun hat auf Interfaces umzustellen. Ich hatte auch einige unerklärliche Probleme, als ich die Klassen direkt genutzt habe und somit Interfaces und Klassen vermischt habe. Nachdem ich alles konsequent auf Interfaces umgestellt hatte, ging es dann.

fastsnake 25. Feb 2010 14:33

Re: TXMLDocument ChildNodes, maximum 35?
 
Probier es mal so:

var
FNode: IXMLNode;

FNode := XMLDocument.DocumentElement.ChildNodes.First;

while assigned(FNode) do
begin

If (Node <> NIL) and (Node.Attributes['name'] = 'Service') then
begin
//do stuff
end;
FNode := FNode.NextSibling;

end;

himitsu 25. Feb 2010 15:19

Re: TXMLDocument ChildNodes, maximum 35?
 
Wo genau kommt denn dieser Fehler? (welche Zeile)

PS: deine For-Schleife strimmte so nicht, denn das IF war dort nicht enthalten
Delphi-Quellcode:
XMLDocument.LoadFromFile('C:\MyTest.xml');

ChildNodes := XMLDocument.DocumentElement.ChildNodes;

If ChildNodes <> NIL then
begin
  for i := 0 to ChildNodes.Count - 1 do
  begin
    //do copy node:
    Node := ChildNodes.Nodes[i];
    If (Node <> NIL) and (Node.Attributes['name'] = 'Service') then
      //do stuff
  end;
end;
Delphi-Quellcode:
XMLDocument.LoadFromFile('C:\MyTest.xml');

Node := XMLDocument.DocumentElement.ChildNodes[0];
while Assigned(Node) and (Node.Attributes['name'] <> 'Service') do
  Node := Node.NextSibling;

If Assigned(Node) then
  //do stuff
Einfacher und ohne Schleife geht es z.B. über XPath

ele 25. Feb 2010 15:24

Re: TXMLDocument ChildNodes, maximum 35?
 
Ich hatte damit noch nie Probleme. Der Verdacht liegt nahe, dass es ein anderes Problem gibt, aber wenn ich deinen Code anschaue habe ich das Gefühl, dass du uns einen Teil verschweigst...

viakt133 25. Feb 2010 17:14

Re: TXMLDocument ChildNodes, maximum 35?
 
Dankeeeee! :hello:

Da kann ich meine Baumstruktur ja auch mit dem XML Dokument aufbauen. Und danach schauen, ob das mit Treenode genauso geht. Juhuuuuu! :cheers:

Könnte ja mit Treenode.Items[] auch gehen.

Genau das was ich hier gesucht habe! Da kommt bei BtnShowClick nämlich nix raus und der Debugge rhat mitr nur gesagt, das mein Zeiger zunächst gültig ist aber in der Schleife dann NIL wird. Aber was ich da anders machen muss, hat mitr der Debugger nicht gesgt. Schön, das es noch andere Threads gibt! :zwinker:


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