Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   xmlnode problem (https://www.delphipraxis.net/154919-xmlnode-problem.html)

value is NULL 30. Sep 2010 16:58

xmlnode problem
 
Hi leutz

habe folgenden code:

Delphi-Quellcode:
          myNode := config.DocumentElement.ChildNodes.First.ChildNodes.FindNode('accdevs');
          if myNode <> nil then begin
            myNodeList := MyNOde.ChildNodes;
            for i := 0 to mynodelist.Count -1 do begin
              if accdev = MyNodeList[i].nodevalue then begin
                logfilest.add(1, 'ACCDEV: '+accdev+' found in config:'+MyNodeList[i].nodevalue);
                i2 := i2 + 1;
              end;
            end;
          end;
          myNodelist.Clear;
ich rufe diese schleife öfter auf, habe jetzt aber das problem, das er mir hier:

Delphi-Quellcode:
for i := 0 to mynodelist.Count -1 do begin
nicht mehr rein geht, was habe ich falsch gemacht?

danke im voraus LG

value is NULL 30. Sep 2010 18:01

AW: xmlnode problem
 
ich glaub ich weiß warum:
beim 2. aufruf ist der mynodelist.counter auf = 0 dh. er findet keine childnodes oder?

Delphi-Quellcode:
if myNode <> nil then begin
 myNodeList := MyNOde.ChildNodes;
zur erklärung, mein xml sieht so aus:

Code:
<config>
 <device id="1">
   <accdevs>
     <accdev>1</accdev>
     <accdev>2</accdev>
   </accdevs>
 </device>
 <device id="2">
   <accdevs>
     <accdev>3</accdev>
     <accdev>4</accdev>
   </accdevs>
 </device>
</config>
mein code sieht so aus:

Delphi-Quellcode:
CoInitialize(nil);
config := LoadXMLDocument('C:\test.xml');
xmlnode := config.DocumentElement.ChildNodes.First;
i3 := 0;
while (xmlnode <> nil) do begin
 i3 := i3 +1;
 if xmlnode.HasAttribute('id') then begin
   if xmlnode.Attributes['id'] = i3 then begin
      myNode := config.DocumentElement.ChildNodes.FindNode('accdevs');
      if myNode <> nil then begin
        myNodeList := MyNOde.ChildNodes;
        for i := 0 to mynodelist.Count -1 do begin
           logfilest.add(1, 'accvalue: '+MyNodeList[i].nodevalue);
           if accdev = MyNodeList[i].nodevalue then begin
               logfilest.add(1, 'ACCDEV: '+accdev+' found in config:'+MyNodeList[i].nodevalue);
               i2 := i2 + 1;
           end;
        end;
      end;
      myNodelist.Clear;
  end;
  xmlnode := xmlnode.NextSibling;
end;
warum liest er mir die accdevs nur für id = 1 aus? und nicht für id 2?

dane und lg

stahli 30. Sep 2010 18:20

AW: xmlnode problem
 
Geht er denn ein zweites mal in die while-Schleife hinein?

value is NULL 30. Sep 2010 18:40

AW: xmlnode problem
 
hier geht er noch rein

Delphi-Quellcode:
if myNode <> nil then begin
 myNodeList := MyNOde.ChildNodes;

stahli 30. Sep 2010 18:48

AW: xmlnode problem
 
Ich denke, Du suchst wieder im ersten Knoten, der aber inzwischen geleert ist.
Delphi-Quellcode:
myNode := config.DocumentElement.ChildNodes.FindNode('accdevs');
Lass Dir mal das XML-Dokument nach dem ersten Schleifendurchlauf anzeigen.

value is NULL 30. Sep 2010 18:59

AW: xmlnode problem
 
das stimmt!
wie wäre das zu realisieren? so vielleicht?

Delphi-Quellcode:
mynode := config.DocumentElement.NextSibling;

stahli 30. Sep 2010 19:08

AW: xmlnode problem
 
Kann ich nicht sicher sagen (da die XML-Kompos immer etwas unterschiedlich zu handhaben sind).
Wenn Die Struktur immer in der festgelegten Form vorliegt geht vielleicht auch so etwas wie
Delphi-Quellcode:
mynode := XmlNode.ChildNodes[0].ChildNodes[0]

value is NULL 30. Sep 2010 19:21

AW: xmlnode problem
 
die Struktur ist immer die selbe, weiß jedoch nicht wo ich das implementieren soll....

value is NULL 1. Okt 2010 11:08

AW: xmlnode problem
 
habe den fehler gefunden:
Delphi-Quellcode:
myNode := xmlnode.ChildNodes.FindNode('accdevs');
diese Zeile machts möglich... :)


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