Delphi-PRAXiS
Seite 6 von 9   « Erste     456 78     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

Zwoetzen 5. Feb 2010 09:09

Re: himXML (gesprochen himix ML)
 
Ach Platzhalter kann man auch verwenden? Wieder was dazu gelernt :mrgreen:

Schnell mal getestet, und scheint wunderbar zu funktionieren. Danke für die Hilfe :)

himitsu 5. Feb 2010 09:39

Re: himXML (gesprochen himix ML)
 
Jupp, das geht auch. :mrgreen:

Du kannst dir auch einfach mal den kleinen "leicht" unvollständigen Help-Abschnitt ganz oben in der himXML.pas ansehn.

Zwoetzen 5. Feb 2010 11:57

Re: himXML (gesprochen himix ML)
 
Da hatte ich extra nochmal reingeschaut gehabt, da ich mich erinnern konnte, dass es irgendwas mit * gegeben hat, aber da konnte ich nur
Delphi-Quellcode:
  //         Node['*:node']                        ignore namespace
  //         Node['name:*']                        first/all nodes with this namespace
finden. Deshalb dacht ichd ann, dass es '*' für komplett alle Knoten wohl nicht geben würde. Zumindest kommt es nicht direkt rüber, dass es eben * und ? als die bekannten Platzhalter gibt ;)

(Vielleicht wurde die Hilfe auch schon erweitert, ich nutze aktuell die v0.98)

himitsu 5. Feb 2010 12:03

Re: himXML (gesprochen himix ML)
 
Ohhh, ich dachte ich hätte es erwähnt. :oops:

PhilCore 16. Mär 2010 15:24

Re: himXML (gesprochen himix ML)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo himitsu,

ich habe mich hier halbwegs durch den Thread geackert, da ich auf der Suche nach einer zuverlässigen und zugleich schnellen Verarbeitung von XML bin.
Nun habe ich mir die v0.99 beta und die v0.9 runtegeladen und leider konnte ich gleich die erste Datei, die ich mit Demo_tree ausprobieren wollte nicht laden.

Der erste Versuch (v0.99 beta) lieferte mir nur eine undankbare Fehlermeldung mit line 0 und col 0.
Dann habe ich die Version 0.9 ausprobiert und siehe da, der Hinweis auf Zeile 44 meiner Datei.

An diese Stelle (Zeile 44) steht aber nichts, womit XML nicht klar kommt. Vielleicht ist dort noch eine kleine Lücke.
Main XML spy sagt: well formed und valid.

Ich hänge mal die verkleinerte Test-XML an, vielleicht kann der XML-Großmeister was dazu sagen.

Wäre schon toll, wenn wir dieses MSXML-Monster austauschen könnten.

himitsu 17. Mär 2010 10:21

Re: himXML (gesprochen himix ML)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

---------------------------
Demo_tree2
---------------------------
EXMLException (TXMLFile.ParsingTree):

unknown closing tag - node "links" is the last opened, but closing "link" is found

error at byte position 1.614 ("</link>
* </links>
</object>
</body>
</imf>" on line 44)

error at byte position 1.614 ("" on line 44)

error at byte position 1.614 ("" on line 44)

error at byte position 1.614 ("" on line 44)

error at byte position 1.614 ("" on line 44)
---------------------------
OK
---------------------------
XML-Code:
<links>
  <link>
    <IssuesLink/>
    <object_uid>
Das Problem ist erstmal, daß aus irgendeinem Grund die nachfolgenden Nodes nach <link> nicht als Unterknoten weitergeführt werden
und demnach wird dann gemeckert, als das </link> vorbeikommt, da dort kein offenes <link> vorhanden ist.

Den Grund kann ich so jetzt aber nicht rausfinden.
- hab hier kein Delphi
- und fahr diese Nacht auch noch für ein paar Tage weg. (hab 4 anstrengende Messetage vor mir)

Sobald ich dann wieder Zeit hab, werd' ich den bösen Fehler mal suchen ... zumindestens sieht es wie ein Fehler in meiner Lib aus ... deine Datei scheint wohl OK zu sein.


[edit]
Sag mal, hast du die XML mit einem der beiden Demo_Tree-Programmen geöffnet?
Konnte es grade auch nur mit diesen Testen, da ich nur diese, als einzige fertigkompilierte Programme, nutzen konnte.

Dort gibt es eine "böse" Zeile, welche für einen kompatibilitätztest mit HTML-Dateien noch vorhanden ist (diese sollte ich demnächst mal entfernen)
Delphi-Quellcode:
XML.ParsedSingleTags := 'meta|link|br|img';
Ein "link"-Node wird dadurch immer als "Single-Tag" angesehn ... also so als wäre er immer <link/>, selbst wenn <link> dasteht.

Entferne diese Zeile aus der Demo und kompiliere sie neu, danach sollte es hoffentlich gehn.
(kann's hier ja leider gerade nicht testen)


[merke]
Aber die Zeilenzählung in der Exceptionbehandlung muß ich mir dann auch mal ansehn, denn dieses "line 0 und col 0." sieht ja wohl nicht OK aus.

samso 17. Mär 2010 12:42

Re: himXML (gesprochen himix ML)
 
Also SimpleXML kann die Datei problemlos einlesen :wink:

Zwoetzen 15. Apr 2010 14:44

Re: himXML (gesprochen himix ML)
 
So, wird langsam Zeit für meine nächste Frage :p

Und zwar habe ich folgendes Problem: Ich brauche bestimmte Knoten, sagen wir <code>, die innerhalb von anderen Knoten sind. Am besten ein Beispiel:
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<root>
   <parent>
      <child>
         <code name="will ich" />
         <code name="das auch" />
      </child>
      <child>
         <code name="auch" />
      </child>
   </parent>
   <parent>
      <child>
         <code name="will ich auch" />
         <code name="haben will" />
      </child>
   </parent>
   <code name="den will ich nicht" />
</root>
Ich will nun die <code> innerhalb von <parent> und <child> haben, und nur diese, dh. ganz unten das <code> will ich nicht mehr.

Aktuell habe ich eine 3fach verwendete Schleife, nicht gerade das Gelbe vom Ei. Auf Seite 13 oder so wurde .FindNodes() erwähnt, doch konnte ich damit nicht die gewünschten Knoten bekommen.
Delphi-Quellcode:
procedure Test;
var
  XML: TXMLFile;
  Node: TXMLNode;
  Codes: String;
  N1, N2, N3: TXMLNode;
begin
  XML := TXMLFile.Create;
  XML.LoadFromFile('C.\test.xml');

  // 3fache Schleife... Nicht schön, liefert aber das gewünschte Ergebnis
  for N1 in XML.NodeList['parent'] do
    for N2 in N1.NodeList['child'] do
      for N3 in N2.NodeList['code'] do
        Codes := Codes + sLineBreak + N3.Attributes['name'];

//  for Node in XML.FindNodes['parent\child\code'] do // Liefert nur den ersten <code>
//  for Node in XML.FindNodes['code'] do // Liefert logischerweise auch den letzten <code>, aber auch nicht alle anderen
//    Codes := Codes + sLineBreak + Node.Attributes['name'];
       
  ShowMessage(Codes);

  XML.Free;
end;
Die eigentliche Frage kannst du dir sicher schon denken: Gibt es einen hübscheren Weg als die 3fach-Verschachtelte Schleife, an die Knoten zu kommen? ^^
FindNodes() klingt ja nach dem, was ich suche, nur entweder kann ich es nicht richtig anwenden oder da ist noch ein Fehlerchen drin :stupid:


MfG Zwoetzen

himitsu 15. Apr 2010 15:15

Re: himXML (gesprochen himix ML)
 
Aktuell sind die Schleifen wohl das Beste.
Leider hat FindNodes wirklich ein paar "Macken".

Darum arbeite ich schon seit 'ner Weile an einer XPath-Variante,
aber leider hängt es da an einigen Stellen. (vorallem an einer Hier im Forum suchenRegEx-Anbindung, welche einige String-Vergleiche besser behandeln soll.)

.FindeNodes ohne Pfade sollte mit dieser Änderung bessere Ergebnisse liefern
Delphi-Quellcode:
Function TXMLNodeList.GetFindNodeArray(Name: TWideString): TXMLNodeArray;
  Var N:  TXMLNode;
    A, A2: TXMLNodeArray;
    i, i2: Integer;

  Begin
    //Result := nil;
    //N := NodeU[Name];
    //If Assigned(N) Then Begin
    //  SetLength(Result, 1);
    //  Result[0] := N;
    //End;
    {}Result := NodeList[Name];
    A := NodeList['*'];
    For i := 0 to High(A) do Begin
      A2 := A[i].FindNodes[Name];
      If Assigned(A2) Then Begin
        i2 := Length(Result);
        SetLength(Result, i2 + Length(A2));
        MoveMemory(@Result[i2], @A2[0], Length(A2) * SizeOf(TXMLNode));
      End;
    End;
  End;
XML.FindNodes['code'] findet zumindestens alle 6 Code-Nodes.

Zwoetzen 15. Apr 2010 15:39

Re: himXML (gesprochen himix ML)
 
Nagut, dann bleib ich erstmal bei den Schleifen.

Auf Seite 12 unten klang es so, als seien diese Funktionen schon fertig, und entsprechend war ich vom Ergebnis etwas verunsichert. ;)

Danke für die schnelle Auskunft :mrgreen:

Codewalker 2. Mai 2010 20:00

Re: himXML (gesprochen himix ML)
 
Ich versuche erfolglos folgende XML-Datei zu laden (nur der relevante Anfang:
XML-Code:
  <?xml version="1.0" ?>
 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2009-07-01">
 <OperationRequest>
  <RequestId>147c6ffa-697d-4a9b-86e0-2c9216c2cd60</RequestId>
 <Arguments>
  <Argument Name="Operation" Value="ItemSearch" />
  <Argument Name="Service" Value="AWSECommerceService" />
  <Argument Name="Signature" Value="uXLTuuePbsbl977Rcz+6TNyq3ihx3J52+KN6jt4DlSA=" />
  <Argument Name="ItemPage" Value="1" />
  <Argument Name="AssociateTag" Value="bla" />
  <Argument Name="Version" Value="2009-07-18" />
  <Argument Name="Keywords" Value="Matrix" />
  <Argument Name="AWSAccessKeyId" Value="KEY" />
  <Argument Name="Timestamp" Value="2010-05-02T18:52:50Z" />
  <Argument Name="ResponseGroup" Value="Large" />
  <Argument Name="SearchIndex" Value="DVD" />
  </Arguments>
  <RequestProcessingTime>0.1835730000000000</RequestProcessingTime>
  </OperationRequest>
 <Items>
 <Request>
  <IsValid>True</IsValid>
 <ItemSearchRequest>
  <Condition>New</Condition>
  <DeliveryMethod>Ship</DeliveryMethod>
  <ItemPage>1</ItemPage>
  <Keywords>Matrix</Keywords>
  <MerchantId>Amazon</MerchantId>
  <ResponseGroup>Large</ResponseGroup>
  <ReviewSort>-SubmissionDate</ReviewSort>
  <SearchIndex>DVD</SearchIndex>
  </ItemSearchRequest>
  </Request>
  <TotalResults>130</TotalResults>
  <TotalPages>13</TotalPages>
 <Item>
  <ASIN>B001G5HB2I</ASIN>
  <DetailPageURL>http://www.amazon.de/Matrix-Complete-Trilogy-Keanu-Reeves/dp/B001G5HB2I%3FSubscriptionId%3D1HDS51J6EDYSCKF0YJ82%26tag%3Dtastenhacker-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001G5HB2I</DetailPageURL>
  </Item>
 </Items>
</ItemSearchResponse>
usw.

Mein Code sieht so aus:
Delphi-Quellcode:
procedure Parse(ResponseXML: string);
var
  XML: TXMLFile;
  I: integer;
  Movie: TMovie;
  PicURL: string;
begin
  XML := TXMLFile.Create();
  try
    ClearMovies();
    XML.LoadFromXML(ResponseXML);
    with XML.Node['ItemSearchResponse'].Node['Items'] do
    begin
      Self.TotalResults := Node['TotalResults'].Text;
      Self.TotalPages := Node['TotalPages'].Text;
      for I := 0 to Nodes.Count - 1 do
      begin
        if Nodes[i].Name = 'Item' then
        begin
         // Mach was mit Item
        end;
      end;
    end;
  finally
    XML.Free;
  end;
end;
Ich bekomme aber für TotalResults und TotalPages immer eine 0. Wo liegt mein Problem?

himitsu 2. Mai 2010 20:22

Re: himXML (gesprochen himix ML)
 
XML.Node['...'] entspricht with XML.RootNode.Node['...'] do

versucht mal statt
Delphi-Quellcode:
with XML.Node['ItemSearchResponse'].Node['Items'] do
einfach nur
Delphi-Quellcode:
with XML.Node['Items'] do

PS: Zum Test kannst du auch mal das standardmäßig gesetzte xoNodeAutoCreate aus den Options entfernen, dann sollte es eine Exception geben, weil ja auf einen nicht existierenden Node zugegriffen wird.

geskill 10. Mai 2010 15:29

Re: himXML (gesprochen himix ML)
 
hey himitsu, bin nun nach langem hin und her (vor allem wegen Threadsicherheit) von der MSXML auf deine Klasse umgestiegen.

Da ist mir doch gleich ein Fehler aufgefallen (v0.99d Beta 12.01.2010). Wenn ich den Wert einen Checkbox oder allgemeiner einen Boolean-Wert abspeichere, erwarte ich, dass True/False geschrieben wird. Deine Klasse schreibt bei Wahr jedoch $FFFF. Hab den Fehler mittels BoolToStr erstmal umgehen können.

Ansonsten Top Arbeit :thumb:

Beispiel:
Delphi-Quellcode:
<TXMLFile>.Nodes['xml'].Nodes['testwert'].Text := True;

himitsu 10. Mai 2010 19:00

Re: himXML (gesprochen himix ML)
 
Threadsicher ist meine Klasse aber auch nicht ... jedenfalls sollte man nicht von mehreren Threads aus den selben Node, bzw. die selbe NodeListe bearbeiten/ändern.
(diesbezüglich wird sich aber in der nächsten Version sehr viel ändern, vorallem da ich jetzt endlich eine gute Möglichkeit für die Nutzung von Interfaces gefunden hab ... hatte ja enorme Probleme mit Kreuzreferenzen und dudurch selbsthaltenden Datenstrukturen :? )

In der nächsten Version und wenn ich meine RexEx-Klasse (ePCRE) fertig hab, wird es wohl auch endlich XPath geben.



Hhhhh, das nut den Boolean muß ich wohl nochmal nachsehn, der Grund hiefrür ist erstmal, daß in einem Variant nicht das 1-Byte-kleine Boolean, sondern das 2-Byte WordBool Verwendung findet.
Boolean: True = 1
WordBool: True = -1 aka $FFFF

Aber eigentlich dachte ich, ich hätte dieses entsprechend beachtet. :shock:
Intern ist jedenfalls eine eigene Version von BoolToStr verbaut.
Denn der Hauptgrund für den Nummerischen Wert ist, daß ich keine SubWerte vernichten wollte
und es somit auch einen nummerischen Modus gibt, neben den TRUE- und FALSE-Ausdrücken für -1 und 0.
> Ein Boolean, ByteBool, WordBool oder LongBool kennt nunmal nicht nur True und False, sondern noch viel mehr.
PS: Das ist auch der Grund, warum man bei Abfragen nicht mit =True vergleichen darf. :zwinker:
Aber wir gesagt, eigentlich sollte bei diesem $FFFF in der Datei TRUE drinstehn ... ich werd' es mir also nochmal ansehn.

BlueStarHH 18. Jun 2010 07:56

AW: himXML (gesprochen himix ML)
 
Hallo himitsu,

erstmal vielen Dank für Deine erstklassige Arbeit! Mir gefällt die himXML sehr gut!

Zu meiner Frage: Ich möchte GUI-Komponenten als XML speichern und wieder laden. Also aus der XML wieder eine GUI erstellen. Das wollte ich mit TXMLNode.Serialize() machen, doch dann kommt einen Exception, die sagt dass es noch nicht implementiert ist. Schaut man in den Quellcode ist dort jedoch schon Code zu finden. Der ist jedoch noch nicht fertig und funktioniert noch nicht richtig? Oder wie soll man das verstehen? Was fehlt denn noch? Wie aufwändig wird es, das fehlende noch zu implementieren? Gibt es zeitliche Planungen für die Fertigstellung?

PS: Welche von den beiden Archiven (himxml_246.7z, himxml_164.7z) ist die aktuelle Version? Man könnte meinen das wäre die himxml_246 weil 246 für 2.46 steht. Schaut man aber in die Archive rein, sind die neueren Dateien in 164 zu finden. Nach welchem Muster vergibst Du da die Versionsnummern?

Gruß
BlueStar

himitsu 18. Jun 2010 09:34

AW: himXML (gesprochen himix ML)
 
Ja, mit diesem (De)Serialize gibt/gab es noch einige Problemchen :cry:

Diese Nummern in den Anhängen haben nichts zu sagen.
Dieses stammen von der internen Verwaltung des alten Forums.
- beide Dateien hießen himXML.7z und die Version war in den nun ebenfalls fehlenden Kommentaren aufgeführt.
Das Aktuellere ist aber zufälliger Weise das mit der größeren Zahl (glaub ich).

Was die Fertigstellung angeht:
Bin grad/immernoch an einem anderem Projekt dran, welcher in der nächste himXML-Version verwendet werden soll.

Eigentlich dachte ich irgendwo im Forum würde eine halbwegs funktioniere ältere Version der Objektserialisierung rumliegen, wenn ich nur wüßte wo ... hatte dazu mal 'nen Thread aufgemacht, wegen einiger Fragen zur Umsetzung.

Neutral General 29. Jun 2010 17:39

AW: himXML (gesprochen himix ML)
 
Hallo,

Hab deine Unit jetzt mal ausprobiert :mrgreen:

Macht allerdings ein paar Probleme mit D2010:
Delphi-Quellcode:
Procedure TXMLNode.Serialize(C: TObject; SOptions: TXMLSerializeOptions = []; Proc: xXMLSerializeProc = nil);
      Procedure _SavePropInfos(Node: xXMLNode; Info: PPropInfo);
        Const cTypeKind: Array[TTypeKind] of AnsiString = ('Unknown', 'Integer', 'Char',
            'Enumeration', 'Float', 'String', 'Set', 'Class', 'Method', 'WChar',
            'LString', 'WString', 'Variant', 'Array', 'Record', 'Interface', 'Int64',
            'DynArray' , {$IF Declared(UnicodeString)} 'UString' {$IFEND});
Zitat:

[DCC Fehler] HimXML.pas(6767): E2072 Anzahl der Elemente (19) weicht von der Deklaration (22) ab
Das ist ca. Zeile 6765 in der HimXML.pas. Problem scheint nur zu sein, dass TTypeKind unter D2010 ein paar weitere Einträge hinzubekommen hat. Ansonsten bekomme ich noch:

Zitat:

[DCC Hinweis] HimXML.pas(774): H2219 Das private-Symbol 'DoChanged' wurde deklariert, aber nie verwendet
Zitat:

[DCC Hinweis] HimXML.pas(1210): H2219 Das private-Symbol 'SetOwner' wurde deklariert, aber nie verwendet
Nichts tragisches, aber wollte dich darauf hinweisen, falls das nicht beabsichtigt sein sollte ;)

himitsu 29. Jun 2010 18:40

AW: himXML (gesprochen himix ML)
 
hast du die mit der größeren Nummer (sind nur indexnummern des alten phpBBs) verwendet?
(eigentlich dachte ich ich hätte eine Version Oben, welche schon mit D2010 zurecht kommt)

der gezeigte Codeausschnitt gehört jedenfalls zur älternen Version. :gruebel:




Nja, ich bastel jetzt erstmal vorwiegend die Webseite, dann kommt da die Hilfe für's RegEx (ePCRE), die himXML und Anderes hin
und danach wird's RegEx für's XPath ins himXML eingebaut und das himXML wieder auf selbstverwaltete (Refferenzzählung) Interfaces umgestellt.
Wird irgendwie langsam zuviel, um noch alles zu überblicken, da Vieles zusammenhängt.

Neutral General 29. Jun 2010 18:46

AW: himXML (gesprochen himix ML)
 
Habe diese Version hier: himxml_246.7z
Wenn das die ältere Version sein sollte, dann ist die Benennung ziemlich irritierend :?

himitsu 29. Jun 2010 19:13

AW: himXML (gesprochen himix ML)
 
Nja, original hießen beide mal himXML.7z und die Versionen standen in den nun nicht mehr existierenden Dateikommentaren.

hab nochmal reingesehn ... es ist doch andersrum :shock:
(wie gesagt, die Dateinamen sind nicht von mir, daran isses neue Forum Schuld)

himxml_246 = v0.9 21.05.2009
himxml_164 = v0.99d 12.01.2010

Neutral General 29. Jun 2010 19:19

AW: himXML (gesprochen himix ML)
 
Wow, ich glaube ich lade mir doch die Version aus der Zukunft von 2020! :mrgreen:

Du könntest ja evtl. beide Versionen nochmal neu hochladen mit einem besseren Namen ;)

RWarnecke 28. Aug 2010 15:56

AW: himXML (gesprochen himix ML)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo himitsu,

ich wollte gerade Dein himXML ausprobieren unter Delphi 2006. Leider bekomme ich keine Daten aus meiner XML-Datei ausgelesen. Könntest Du mir da vielleicht weiterhelfen. Das erste ist, wenn ich Deine Datei himXML.pas öffne, dann bekomme ich schonmal die Meldungen aus dem Anhang. Dann probiere ich es trotzdem mit folgenden Code die XML-Datei zu öffnen und Werte auszulesen :
Delphi-Quellcode:
var
  FormalXML : TXMLFile;
begin
  FormalXML := TXMLFile.Create;
  try
    FormalXML.asXML := '"' + GetEnvVarValue('SystemRoot') + '\Performance\WinSAT\DataStore\2010-08-28 14.10.58.562 Formal.Assessment (Initial).WinSAT.xml"';
    with FormalXML.Node['WinSAT'].Node['WinSPR'] do
    begin
      Label30b.Caption := Node['CpuScore'].Text;
      Label112b.Caption := Node['MemoryScore'].Text;
      Label113b.Caption := Node['GraphicsScore'].Text;
      Label114b.Caption := Node['GamingScore'].Text;
      Label115b.Caption := Node['DiskScore'].Text;
    end;
  finally
    FormalXML.Free;
  end;
end;
Jedesmal bekomme ich eine AccessViolation in der Zeile
Delphi-Quellcode:
with FormalXML.Node['WinSAT'].Node['WinSPR'] do
. Das ganze führe ich unter Windows 7 x64 aus.

Edit:
Wenn ich das ganze so ausprobiere :
Delphi-Quellcode:
var
  FormalXML : TXMLFile;
begin
  FormalXML := TXMLFile.Create;
  try
    FormalXML.LoadFromFile('"' + GetEnvVarValue('SystemRoot') + '\Performance\WinSAT\DataStore\2010-08-28 14.10.58.562 Formal.Assessment (Initial).WinSAT.xml"');
    with FormalXML.Node['WinSAT'].Node['WinSPR'] do
    begin
      Label30b.Caption := Node['CpuScore'].Text;
      Label112b.Caption := Node['MemoryScore'].Text;
      Label113b.Caption := Node['GraphicsScore'].Text;
      Label114b.Caption := Node['GamingScore'].Text;
      Label115b.Caption := Node['DiskScore'].Text;
    end;
  finally
    FormalXML.Free;
  end;
end;
Bei dieser Variante wird noch der Pfad vom Arbeitsverzeichnis vor den übergebenen Pfad gesetzt. Somit funktioniert auch hier das Laden des XML-Files nicht.

himitsu 28. Aug 2010 16:30

AW: himXML (gesprochen himix ML)
 
asXML ist der Inhalt der XML-Datei ... also der XML-Code selber.

Eine Datei laden kannst du über LoadFromFile
Delphi-Quellcode:
var
  FormalXML : TXMLFile;
begin
  FormalXML := TXMLFile.Create(;
  try
    FormalXML.LoadFromFile(GetEnvVarValue('SystemRoot')
      + '\Performance\WinSAT\DataStore\2010-08-28 14.10.58.562 Formal.Assessment (Initial).WinSAT.xml');
    with FormalXML.Node['WinSAT'].Node['WinSPR'] do
    begin
      Label30b.Caption := Node['CpuScore'].Text;
      Label112b.Caption := Node['MemoryScore'].Text;
      Label113b.Caption := Node['GraphicsScore'].Text;
      Label114b.Caption := Node['GamingScore'].Text;
      Label115b.Caption := Node['DiskScore'].Text;
    end;
  finally
    FormalXML.Free;
  end;
end;
oder direkt beim Create
Delphi-Quellcode:
var
  FormalXML : TXMLFile;
begin
  FormalXML := TXMLFile.Create(nil, GetEnvVarValue('SystemRoot')
    + '\Performance\WinSAT\DataStore\2010-08-28 14.10.58.562 Formal.Assessment (Initial).WinSAT.xml'), False);
  try
    Label30b.Caption := FormalXML['WinSAT\WinSPR\CpuScore'].Text;
    Label112b.Caption := FormalXML['WinSAT\WinSPR\MemoryScore'].Text;
    ...
Wie sieht denn die XML-Datei aus?
Wenn "WinSAT" der Name des RootNode/Hauptknoten ist, dann kannst/mußt du .Node['WinSAT'] weglassen, da der Hauptknoten über XML.Node schon direkt angesprochen wurde.

RWarnecke 28. Aug 2010 16:50

AW: himXML (gesprochen himix ML)
 
Hallo Himitsu,

danke erstmal für Deine prompte Antwort.

Zitat:

Zitat von himitsu (Beitrag 1045756)
Wie sieht denn die XML-Datei aus?

Wenn Du Windows VISTA oder Windows 7 als Betriebssystem installiert hast, kann Du Dir die XML-Datei in dem angegebenen Pfad anschauen.

Zitat:

Zitat von himitsu (Beitrag 1045756)
Wenn "WinSAT" der Name des RootNode/Hauptknoten ist, dann kannst/mußt du .Node['WinSAT'] weglassen, da der Hauptknoten über XML.Node schon direkt angesprochen wurde.

Die Node WinSAT ist die RootNode.

Wenn ich Dein Beispiel übernehme, bekomme ich folgende Fehlermeldung :
Zitat:

---------------------------
Debugger Exception Notification
---------------------------
Project SystemInfo.exe raised exception class EXMLException with message 'EXMLException (TXMLFile.ParsingTree):
unknown encoding

error at byte position 2 ("" on line 1)'.
---------------------------
Break Continue Help
---------------------------
Diese Meldung taucht auf in der Zeile FormalXML.LoadFromFile.

himitsu 28. Aug 2010 17:02

AW: himXML (gesprochen himix ML)
 
Nein, solche Dateien gibt es nicht.
Und auf die Schnelle bekomm ich die gefundene WinSAT.exe nicht zum laufen.

RWarnecke 28. Aug 2010 17:10

AW: himXML (gesprochen himix ML)
 
Zitat:

Zitat von himitsu (Beitrag 1045772)
Und auf die Schnelle bekomm ich die gefundene WinSAT.exe nicht zum laufen.

In Windows 7 oder Windows Vista die Tastenkombi Windows-Taste+Pause drücken und dann kannst Du den Leistungsindex von Deinem Betriebssystem abfragen. Ich schicke Dir zuästzlich noch die angegebene Datei per PN.

himitsu 28. Aug 2010 17:29

AW: himXML (gesprochen himix ML)
 
Ohhh, das böse UTF-16 :shock:

OK, da müßtest du mal ein bissl "hacken".
- in der himXML.pas nach xeUTF16 suchen und diese beiden/drei Funde entkommentieren
- in TXReader.ReadData und und TXWriter.WriteDataX gibt es jeweils ein
Delphi-Quellcode:
Case _Encoding of
,
dort bei den Werten
Delphi-Quellcode:
xeUnicode, xeUnicodeBE
noch das xeUTF16 mit hinzufügen.

Dann sollte es "nutzbar" sein.

RWarnecke 28. Aug 2010 18:12

AW: himXML (gesprochen himix ML)
 
Hallo himitsu,

danke für Deine Hilfe. Nun funktioniert Dein himXML erstklassig. :thumb:

himitsu 28. Aug 2010 18:19

AW: himXML (gesprochen himix ML)
 
Zitat:

Zitat von RWarnecke (Beitrag 1045781)
Hallo himitsu,

danke für Deine Hilfe. Nun funktioniert Dein himXML erstklassig. :thumb:

In der (geheimen) aktuellen Überarbeitung läßt sich sowas dann leichter ändern/erweitern :)

RWarnecke 28. Aug 2010 18:49

AW: himXML (gesprochen himix ML)
 
Hast Du da noch mehr auskommentiert, was man wissen sollte ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 6 von 9   « Erste     456 78     Letzte »    

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