Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   In GPX (XML) Datei anzahl Nodes auslesen (https://www.delphipraxis.net/162505-gpx-xml-datei-anzahl-nodes-auslesen.html)

hedie 25. Aug 2011 14:56

In GPX (XML) Datei anzahl Nodes auslesen
 
Hallo zusammen

Ich versuche die Anzahl der WPT Nodes in einer GPX (XML) Datei auszulesen...

Also wie oft ein solcher Block vorkommt:

Code:
<wpt lat="42.438878" lon="-71.119277">
 <ele>44.586548</ele>
 <time>2001-11-28T21:05:28Z</time>
 <name>5066</name>
 <desc><![CDATA[5066]]></desc>
 <sym>Crossing</sym>
 <type><![CDATA[Crossing]]></type>
</wpt>
Irgendwie schaffe ich es nicht die Anzahl auszulesen...

Mit
Delphi-Quellcode:
showmessage(inttostr(Document.DocumentElement.ChildNodes['wpt'].ChildNodes.Count));
Erhalte ich die Anzahl (6) innerhalb von wpt

Ich hoffe ihr könnt mir helfen :)
Danke

Mein Code Bisher:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  Document:IXMLDocument;
  i:integer;
begin

  if 1 = 1 then
  begin
    Document := NewXMLDocument;
    Document.Encoding := 'ISO-8859-1';
    Document.LoadFromFile('J:/fells_loop.gpx');
    Document.Active := True; //Parsen lassen

   Memo3.Lines.Clear;
    // Titelzeile anfügen
    //Memo3.Lines.Add(Document.DocumentElement.ChildNodes['wpt'].Attributes['lat']);

      showmessage(inttostr(Document.DocumentElement.ChildNodes['gpx'].ChildNodes.Count));
    // Beiträge anfügen
    //for i := 0 to Document.DocumentElement.ChildNodes['wpt'].ChildNodes.Count -1 do
    //Memo3.Lines.Add(Document.DocumentElement.ChildNodes['wpt'].ChildNodes[i].Attributes['lat']);
  end;

end;

Hier ein auszug aus der GPX Datei

Code:
<?xml version="1.0"?>
<gpx
 version="1.0"
 creator="ExpertGPS 1.1 - http://www.topografix.com"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.topografix.com/GPX/1/0"
 xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2002-02-27T17:18:33Z</time>
<bounds minlat="42.401051" minlon="-71.126602" maxlat="42.468655" maxlon="-71.102973"/>
<wpt lat="42.438878" lon="-71.119277">
 <ele>44.586548</ele>
 <time>2001-11-28T21:05:28Z</time>
 <name>5066</name>
 <desc><![CDATA[5066]]></desc>
 <sym>Crossing</sym>
 <type><![CDATA[Crossing]]></type>
</wpt>
<wpt lat="42.439227" lon="-71.119689">
 <ele>57.607200</ele>
 <time>2001-06-02T03:26:55Z</time>
 <name>5067</name>
 <desc><![CDATA[5067]]></desc>
 <sym>Dot</sym>
 <type><![CDATA[Intersection]]></type>
</wpt>
<wpt lat="42.438917" lon="-71.116146">
 <ele>44.826904</ele>
 <time>2001-11-16T23:03:38Z</time>
 <name>5096</name>
 <desc><![CDATA[5096]]></desc>
 <sym>Dot</sym>
 <type><![CDATA[Dot]]></type>
</wpt>
<wpt lat="42.443904" lon="-71.122044">
 <ele>50.594727</ele>
 <time>2001-11-28T21:05:28Z</time>
 <name>5142</name>
 <desc><![CDATA[5142]]></desc>
 <sym>Dot</sym>
 <type><![CDATA[Dot]]></type>
</wpt>
<wpt lat="42.447298" lon="-71.121447">
 <ele>127.711200</ele>
 <time>2001-06-02T03:26:58Z</time>
 <name>5156</name>
 <desc><![CDATA[5156]]></desc>
 <sym>Dot</sym>
 <type><![CDATA[Intersection]]></type>
</wpt>
....
<rte>
 <name>BELLEVUE</name>
 <desc><![CDATA[Bike Loop Bellevue]]></desc>
 <number>1</number>
<rtept lat="42.430950" lon="-71.107628">
 <ele>23.469600</ele>
 <time>2001-06-02T00:18:15Z</time>
 <name>BELLEVUE</name>
 <cmt>BELLEVUE</cmt>
 <desc><![CDATA[Bellevue Parking Lot]]></desc>
 <sym>Parking Area</sym>
 <type><![CDATA[Parking]]></type>
</rtept>
</rte>
</gpx>

himitsu 25. Aug 2011 17:43

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
Zitat:

Delphi-Quellcode:
Node := ChildNodes['wpt']; // aka Node := ChildNodes.Nodes['wpt']; da Nodes = Default-Property
i := Node.ChildNodes.Count;

Ich denke du willst die Anzahl der wpt-Nodes und nicht die Anzahl der Childnodes des ersten wpt-Node?

hedie 25. Aug 2011 18:58

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
Jawohl so ist es :)

Aber wie krieg ich diese Anzahl?

Thom 25. Aug 2011 19:00

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
Delphi-Quellcode:
  WPTCount:=0;
  for n:=0 to Document.ChildNodes.Count-1 do
    if Document.ChildNodes[n].NodeName='wpt'
      then Inc(WPTCount);
Zitat:

Zitat von hedie (Beitrag 1119676)
Aber wie krieg ich diese Anzahl?

Das ist typisch für dieses Forum: Viele Antworten auf Fragen, die nie gestellt wurden... :lol:

himitsu 25. Aug 2011 19:57

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
Mir fiehl/fällt einfach der Befehl nicht ein, über das Stichwort "XPath" solte sich im Forum was finden lassen.

Thom 26. Aug 2011 02:33

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
Kürzere Lösung:
Delphi-Quellcode:
  Document.DOMDocument.DocumentElement.GetElementsByTagName('wpt').Length;
  //...

himitsu 26. Aug 2011 07:58

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
GetElementsByTagName ... ich wußte doch, daß MSXML irgendwo sowas hat ... nur finden muß man es erstmal :oops:

Thom 26. Aug 2011 10:21

AW: In GPX (XML) Datei anzahl Nodes auslesen
 
War auch nur Zufall, daß ich das gefunden habe... :?


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