AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Alternative zu count einer XML Datei

Ein Thema von Takeo · begonnen am 25. Jul 2014 · letzter Beitrag vom 25. Jul 2014
Antwort Antwort
Seite 1 von 2  1 2   
Takeo

Registriert seit: 15. Jul 2014
14 Beiträge
 
#1

Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 09:31
Delphi-Version: XE2
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
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 09:42
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....
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 10:18
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 10:19
Ich würde eher auf Nodes tippen.
Markus Kinzler
  Mit Zitat antworten Zitat
Takeo

Registriert seit: 15. Jul 2014
14 Beiträge
 
#5

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 10:22
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>
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 10:31
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...
  Mit Zitat antworten Zitat
Takeo

Registriert seit: 15. Jul 2014
14 Beiträge
 
#7

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 11:28
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?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 11:56
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..
  Mit Zitat antworten Zitat
Takeo

Registriert seit: 15. Jul 2014
14 Beiträge
 
#9

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 11:59
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Alternative zu count einer XML Datei

  Alt 25. Jul 2014, 12:15
- 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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:00 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