Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alternative zu count einer XML Datei (https://www.delphipraxis.net/181212-alternative-zu-count-einer-xml-datei.html)

Takeo 25. Jul 2014 09:31

Delphi-Version: XE2

Alternative zu count einer XML Datei
 
Hallo Community,

ich benutze Delphi XE2 und habe folgendes Problem:

Mein Programm öffnet eine XML Datei und durchsucht diese nach bestimmten Werten. Dabei wird die Anzahl der relevanten Nodes gezählt. Da die Datei aber über 150.000 Einträge hat benötigt der "Count" über 5min.

Gibt es eine alternative zu Count, damit ich mir diese Zeit sparen kann? Geht etwas in der Art, dass das letzte Element gelesen wird, ohne, dass er alles durchzählen muss und mir dann die "Zeilennummer" des letzten Elements sagt?

Vielen Dank im voraus!

Gruß Takeo

Lemmy 25. Jul 2014 09:42

AW: Alternative zu count einer XML Datei
 
Hi,

bitte erzähl mal was "relevante" Knoten sind. Eine "Zeilenzahl" am Ende eines Dokument enthält typischerweise alles. Und zwischen "alles" und "relevant" gibt es einen kleinen aber feinen Unterschied....

p80286 25. Jul 2014 10:18

AW: Alternative zu count einer XML Datei
 
Zitat:

Zitat von Takeo (Beitrag 1266629)
Da die Datei aber über 150.000 Einträge hat benötigt der "Count" über 5min.

Wenn ich "Einträge" mal mit "Zeilen" übersetze scheint mir da doch etwas Optimierungsbedarf vorhanden zu sein.

vllt. solltest Du auch den verwendeten Sourcecode mal zeigen.

Gruß
K-H

mkinzler 25. Jul 2014 10:19

AW: Alternative zu count einer XML Datei
 
Ich würde eher auf Nodes tippen.

Takeo 25. Jul 2014 10:22

AW: Alternative zu count einer XML Datei
 
Ok,
also die XML ist so aufgebaut, wie unten beispielhaft zu sehen ist (in echt ist die Liste viel länger und ausführlicher). Was ich möchte ist, dass ich alle Tags durchsuche und wenn der Name auf etwas bestimmtes zutrifft wird das Tag mit Name und Adresse gespeichert. Dies funktioniert alles und passt soweit.
Nur bisher benutze ich Node.ChildNodes.Count (Node ist eine Variable, die bis zum ChildNode['Tags'] gelenkt wird) um die Anzahl der Tags zu zählen und damit eine for-Schleife zu definieren.

Ich hoffe nun ist es klarer. Ich möchte das Count umgehen, weil dies die Hauptursache ist, die Zeit benötigt.

Meine Idee:
Es gibt eine Möglichkeit das letzte Tag zu finden, ohne eine Funktion, die Count irgendwo enthält. Dann kann ich mit einer While-Schleife meine Datei durchforsten, bis das letzte Tag da ist. Geht das und wenn ja, wie?


Zur Übersichtlichkeit:

Code:
<S7Project ScanTime="7/1/2014 12:50:01 PM" Name="dummy" Folder="dummy">
  <Programs>
    <Program Name="S7 Program" Folder="dummy" IPAddress="0.0.0.0" Topic="Test" SymbolID="7802" ID="2">
      <Tags>
        <Tag Name="Name1" Comment="Com1" S7Type="REAL" HWAddress="Address1"/>
        <Tag Name="Name2" Comment="Com1" S7Type="INT" HWAddress="Address2"/>
        <Tag Name="Name3" Comment="Com3" S7Type="INT" HWAddress="Address3"/>
      </Tags>
    </Program>
  </Programs>
</S7Project>

Lemmy 25. Jul 2014 10:31

AW: Alternative zu count einer XML Datei
 
bitte lies dich doch hier mal ein:

https://de.wikipedia.org/wiki/XPath
https://de.wikipedia.org/wiki/XQuery

da gibt es auch entsprechende Umsetzungen für Delphi (je nachdem welche XML-Lib du verwendest) das sollte deutlich schneller gehen...

Takeo 25. Jul 2014 11:28

AW: Alternative zu count einer XML Datei
 
Ich habe neue Erkenntnisse.. es lag nie an Count.

Sobald meine XML das erste Mal angesprochen wird hängt alles. Es muss wohl am Parser liegen.

@Lemmy sind deine 2 Beispiele schneller, als der Standard XML Parser von Delphi?

Lemmy 25. Jul 2014 11:56

AW: Alternative zu count einer XML Datei
 
das sind 2 bzw. ist XPath die Grundlage von XQuery, Techniken die auf XML aufbauen. Haben nix mit dem Parser zu tun. bzw. nur in so weit, dass der es anbietet oder eben nicht..

Takeo 25. Jul 2014 11:59

AW: Alternative zu count einer XML Datei
 
Achso ok.

Stimmt denn meine Vermutung, dass der Parser für die Geschwindigkeit verantwortlich ist?
Das Problem ist halt, dass diese XML Dateien meistens über 30 Mb haben. Die lassen sich nichtmal vernünftig mit dem Editor oder ähnlichem bearbeiten.
Wie kann ich also mein Problem in Griff bekommen?

Gruß Takeo

himitsu 25. Jul 2014 12:15

AW: Alternative zu count einer XML Datei
 
- selber alle Knoten durchlaufen und dabei das Gewünschte manuell zählen
- oder z.B. via XPath filtern und dort das Count auslesen

Und ja, es gibt einige XML-Libs, die teilweise arschlahm sind. (z.B. MS-XML-DOM)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Seite 1 von 2  1 2      

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