Delphi-PRAXiS
Seite 21 von 35   « Erste     11192021 222331     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   himXML (gesprochen himix ML) (https://www.delphipraxis.net/130751-himxml-gesprochen-himix-ml.html)

brechi 12. Jan 2010 09:44

Re: himXML (gesprochen himix ML)
 
Hihu,
ich teste gerade selbst einige XML Parser, da der von MS wirklich nicht der schnellste ist. Ich glaube dein Parser hat einen Bug:

XML:
Code:
<test>
  <R A="X">X</R>
</test>

jetzt will ich das Attribut auslesen:

Delphi-Quellcode:
    txt := Xml.RootNode.Node['R'].Attributes.Name[0]; // A -> Richtig
    txt := Xml.RootNode.Node['R'].Attributes.Value[0]; // 00:00:00 -> sollte aber X sein
Außerdem:
Ist es richtig, dass man mit

Delphi-Quellcode:
  Xml.RootNode.Node['R'].Attributes.ValueCS['A']
direkt auf das Attribut per Name zugreifen kann? Muetzes Funktion "AttributeByName" (oder bei dir entsprechend ValueByName) wäre mir jedenfalls aussagekräftiger.
Edit: hab gesehen geht auch über Value :)

Falls Muetze es mitliest: Kann ich deine XML-Lib in der Firma verwenden (bisher nur intern für nen XML-Testprogramm, eventl. später kommerziell?)

himitsu 12. Jan 2010 10:06

Re: himXML (gesprochen himix ML)
 
Zitat:

Delphi-Quellcode:
Xml.RootNode.Node['R'].Attributes.ValueCS['A']

Delphi-Quellcode:
Xml.RootNode.Node['R'].Attributes.Value['A']
Xml.RootNode['R'].Attributes['A'] // .Node und .Value sind ja DEFAULT
Xml.RootNode['R'].Attribute['A'] // gibt aber auch 'ne Weiterleitung,
Xml.Attribute['R\A'] // welche auch im Dokumentelement verbaut wurde und sogar Pfade mag
Value, welches auch das defaultporperty ist, ist das Richtige und dort kann man entweder einen Index (Integer) oder einen Namen (String) angeben ... hab keine Extrafunktionen für "ByName" angelegt.

Das ValueCS ist nur 'ne Zusatzfunktion (standardmäßig wir alles CaseInsensitiv betrieben, aber man kann dieses ja über die Optionen umstellen ... nja und wenn es auf CaseSensitiv umgestellt ist, dann arbeiten die paar CS-Funktionen dennoch CaseInsensitiv)


@Muetzes Lib: soweit ich weiß darfst du daß ... nur solltest du dich vorher einfach mal bei ihm melden ( http://muetze1.de ) und ihn um Erlaubnis fragen ... er wird auch bestimmt ja sagen
PS: da ist seit gestern ein "netter" Bug in seiner Lib behoben wurden (also besser von seiner Seite mal updaten)


Delphi-Quellcode:
<test>
  <R A="X">X</R>
</test>
wegen dem werd ich mal schauen :shock:

himitsu 12. Jan 2010 10:54

Re: himXML (gesprochen himix ML)
 
der "X"-Fehler wurde entdeckt:

Hatte für die Kompatibilität zu älteren Delphis eine eigene Trim-Funktion verbaut, welche etwas falsch verglich und Strings aus nur einem Zeichen zu einem Leerstring machte. :wall:
( kleines < statt einem <= mit großer Wirkung )
Und dazu kam dann noch ein etwas übereifriges isXMLDateTime, welches Leerstrings als Zeitstring erkannte.
Das 00:00:00 war praktisch ein TDateTime mit dem Wert 0, welcher sich im Variant versteckte.



Und Muetze1s neuste gebugfixte Version wurde auch gleich mit eingefügt.

der Download versteckt in Post #1

brechi 12. Jan 2010 12:52

Re: himXML (gesprochen himix ML)
 
So ich hab auch nochmal ein paar Tests für meine Anforderungen gemacht:

~980MB auf 76 Dateien:

JediSimple: ~185 Sekunden
Muetze1: ~130 Sekunden
himXML: ~250 Sekunden
MS: ~730 Sekunden

Ich greife dabei nur lesen auf die Daten zu. (Prüfung der Eingangsdaten auf fehlende Einträge)
Sowohl Input als auch Output werden in anderen DOM-Parsern weiterverwendet. (daher reicht mir erstmal DOM, es sei denn SAX wäre noch schneller)

Irgendwelche Tips wie ich das schneller bekomme?

(PS: mit Pos dauter es ~ 20 Sekunden)

Mithrandir 20. Jan 2010 11:28

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von brechi
(daher reicht mir erstmal DOM, es sei denn SAX wäre noch schneller)

1 GB an Daten? *rechne* Bei 76 Dateien würde das ja durchschnittlich 12.5 MB pro Datei bedeuten. Ich denke, mit'm SAX-Parser wärst du hier vielleicht besser bedient, zumindest sollte man es mal probieren.

himitsu 20. Jan 2010 11:40

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von Daniel G
1 GB an Daten? *rechne* Bei 76 Dateien würde das ja durchschnittlich 12.5 MB pro Datei bedeuten.

Och, beim MSXML-DOM werden das wohl auch nicht mehr als 100-150 MB pro Datei im Arbeitsspeicher sein. :roll:

Zwoetzen 4. Feb 2010 21:34

Re: himXML (gesprochen himix ML)
 
Nachdem mein aktuelles Projekt ein ganzes Stück vorangekommen ist, habe ich nun die nächste Frage zur XML-Verarbeitung.

Mein Problem ist, dass ich alle Kinder eines Knotens durchlaufen will, wobei die Namen der Kinder unbekannt sind. Wie stelle ich das am einfachsten an?

Bisher habe ich immer folgende Variante genutzt:
Delphi-Quellcode:
var
  Node, N: TXMLNode;
begin
  // Node ist der Knoten, dessen Kinder untersucht werden sollen
  for N in Node.NodeList['code'] do
    ShowMessage(N.Name + N.Text); // Irgendwas mit N anstellen
end;
Damit werden logischerweise nur alle Tags mit dem Namen "code" durchlaufen (was bisher auch immer so gewünscht war), nur irgendwie sehe ich gerade keine Möglichkeit, dass ich alle Knoten erwische. Dabei würde ich gerne die for-in-Schleife behalten bzw. eine ähnlich einfache/kurze Alternative nutzen wollen.

Vielleicht sehe ich auch nur den Wald vor lauter Bäumen nicht mehr, wird langsam spät :stupid:


MfG Zwoetzen

himitsu 5. Feb 2010 07:47

Re: himXML (gesprochen himix ML)
 
Da ich selber keine Enumeratoren implementiert hab, welche für das For-In nötig sind,
es aber netter Weise einen für dynamische Arrays gibt, geht es nur über NodeList, welches ja soein Array liefert.

Nun kannst du auch überall NodeNamen genauso behandeln, wie z.B. Dateinamen bei FindFirst ( * und ? ).
Also Folgendes würde dann alle Nodes durchgehn.
Delphi-Quellcode:
for N in Node.NodeList['*'] do
(abgesehn derer Node-Typen, welche über XML.Options versteckt wurden)

Luckie 5. Feb 2010 07:50

Re: himXML (gesprochen himix ML)
 
Mal was anderes, was eventuell nicht direkt mit dem Code zu tun hat. Aber das stört mich schon,m seit du die Bibliothek hier veröffentlicht hast: Der Name. Wenn man dazu schreiben muss, wie der Name ausgesprochen wird, ist es ein schlechter Name. Ein besserer Name wäre sicherlich der Verbreitung nur förderlich. ;)

himitsu 5. Feb 2010 08:08

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von himitsu
ach ja falls der Name jemandem nich gefällt ... Beschwerden bitte an Matze richten :mrgreen:

Ich kann doch garnichts dafür. :cry:

Nja, hier ist nur die Groß-/Kleinschreibung dran Schuld, aber da diese heutzutage ehoftmals ignoriert wird, da dachte ich es fällt keinem auf. :lol:

himxML = him(i)xML mit'm halbstummen i


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 21 von 35   « Erste     11192021 222331     Letzte » 

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf