![]() |
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:
Außerdem:
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 Ist es richtig, dass man mit
Delphi-Quellcode:
direkt auf das Attribut per Name zugreifen kann? Muetzes Funktion "AttributeByName" (oder bei dir entsprechend ValueByName) wäre mir jedenfalls aussagekräftiger.
Xml.RootNode.Node['R'].Attributes.ValueCS['A']
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?) |
Re: himXML (gesprochen himix ML)
Zitat:
Delphi-Quellcode:
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.
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 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 ( ![]() PS: da ist seit gestern ein "netter" Bug in seiner Lib behoben wurden (also besser von seiner Seite mal updaten)
Delphi-Quellcode:
wegen dem werd ich mal schauen :shock:
<test>
<R A="X">X</R> </test> |
Re: himXML (gesprochen himix ML)
der
![]() 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 ![]() |
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) |
Re: himXML (gesprochen himix ML)
Zitat:
|
Re: himXML (gesprochen himix ML)
Zitat:
|
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:
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.
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; Vielleicht sehe ich auch nur den Wald vor lauter Bäumen nicht mehr, wird langsam spät :stupid: MfG Zwoetzen |
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:
(abgesehn derer Node-Typen, welche über XML.Options versteckt wurden)
for N in Node.NodeList['*'] do
|
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. ;)
|
Re: himXML (gesprochen himix ML)
Zitat:
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 01:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz