AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte himXML (gesprochen himix ML)
Thema durchsuchen
Ansicht
Themen-Optionen

himXML (gesprochen himix ML)

Ein Thema von himitsu · begonnen am 12. Mär 2009 · letzter Beitrag vom 11. Nov 2020
 
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 10. Sep 2009, 14:11
Ich glaub mein neuer XML-Reader ist fast fertig.

Hab das Parsen der Datei aus TXMLFile rausgelöst und werde die nächsten Tage in die anderen Klassen dann den Reader einbinden ... somit haben dann alle Klassen (vorallem TXMLFile und TSAXFile) den selben Parser im Hintergrund und nicht jeder seine eigene Version.

Dieser parst allerdings nur die Datei und ihn interessiert die Verschachtelung überhaupt nicht.

Im Ganzen hochladen kann/möchte ich das Projekt jetzt nicht, da dort noch zuviel nicht wieder geht bzw. einfach schlimm aussieht.

Die EXE im Anhang enthält diesen Code
Delphi-Quellcode:
Var C: LongWord;
  S: WideString;
  R: TXReader;
  F: TStream;
  SL: TStringList;

C := GetTickCount;
S := '';
F := TFileStream.Create('test.xml', fmOpenRead);
R := TXReader.Create(F, [], #13#10);
SL := TStringList.Create;
Try
  While R.Parse do Begin
    Case R.DataType of
      xdInstruction: Begin
                        SL.Add(S + 'xdInstruction: Name="' + R.Name + '"');
                        Insert(' ', S, 1);
                      End;
      xdTypedef: Begin
                        SL.Add(S + 'xdTypedef: Name="' + R.Name + '"');
                        Insert(' ', S, 1);
                      End;
      xdElement: Begin
                        SL.Add(S + 'xdElement: Name="' + R.Name + '"');
                        Insert(' ', S, 1);
                      End;
      xdCData: Begin
                        SL.Add(S + 'xdCData: Name="' + R.Name + '"');
                        Insert(' ', S, 1);
                      End;
      xdComment: Begin
                        SL.Add(S + 'xdComment: -');
                        Insert(' ', S, 1);
                      End;
      xdAttribute: SL.Add(S + 'xdAttribute: Name="' + R.Name + '" Value="' + R.Value + '"');
      xdEndAttribute: SL.Add(S + 'xdEndAttribute: -');
      xdText: SL.Add(S + 'xdText: Value="' + R.Value + '"');
      xdClose: Begin
                        Delete(S, 1, 2);
                        SL.Add(S + 'xdClose: Name="' + R.Name + '"');
                      End;
      xdCloseSingle: Begin
                        Delete(S, 1, 2);
                        SL.Add(S + 'xdCloseSingle: -');
                      End;
    End;
    If GetTickCount - C > 15000 Then Begin
      SL.Add('> TimeOut <');
      Break;
    End;
  End;
  SL.Add('> ' + IntToStr(GetTickCount - C) + ' ms <');
  //Memo1.Lines.Assign(SL);
  Memo1.Lines.BeginUpdate;
  Try
    c := GetTickCount;
    i := 0;
    While i < SL.Count do Begin
      Memo1.Lines.Add(SL[i]);
      If (GetTickCount - C > 45000) and (i + 20 < SL.Count) Then Begin
        Memo1.Lines.Add('');
        Memo1.Lines.Add('...');
        Memo1.Lines.Add('');
        For i := SL.Count - 20 to SL.Count - 1 do
          Memo1.Lines.Add(SL[i]);
        Break;
      End;
      Inc(i);
    End;
  Finally
    Memo1.Lines.EndUpdate
  End;
Finally
  SL.Free;
  R.Free;
  F.Free;
End;
und macht aus dem
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="selfxml.xsl" type="text/xsl" ?>
<Programm>
  <Information>
    <Name>Hans Wurst</Name>
    <Datum>01.10.2009</Datum>
  </Information>
</Programm>
dieses hier
Code:
xdInstruction:  Name="xml"
  xdAttribute:  Name="version"  Value="1.0"
  xdAttribute:  Name="encoding"  Value="ISO-8859-1"
xdCloseSingle:  -
xdInstruction:  Name="xml-stylesheet"
  xdAttribute:  Name="href"  Value="selfxml.xsl"
  xdAttribute:  Name="type"  Value="text/xsl"
xdCloseSingle:  -
xdElement:  Name="Programm"
  xdEndAttribute:  -
  xdElement:  Name="Information"
    xdEndAttribute:  -
    xdElement:  Name="Name"
      xdEndAttribute:  -
      xdText:  Value="Hans Wurst"
    xdClose:  Name="Name"
    xdElement:  Name="Datum"
      xdEndAttribute:  -
      xdText:  Value="01.10.2009"
    xdClose:  Name="Datum"
  xdClose:  Name="Information"
xdClose:  Name="Programm"
> 0 ms <
(eine 29 MB-Datei wird bei mir innerhalb von 2375 ms in die StringListe eingelesen)

falls wer zufällig erkennt, daß da bei seinen Dateien (es wird eine Datei Namens "test.xml" im Programmverzeichnis geladen) irgendwas nicht stimmen kann, so möge er/sie sich bitte melden.

[edit]
ich merk grad, daß bei Kommentaren und Dergleichen der Text falsch gelesen wird
[edit2]
ich hoff der Fehler ist jetzt behoben
[edit3]
die Gesamtlaufzeit ist auf eine Minute begrenzt wurden
maximal 15 Sekunden Lesen und 45 Sekunden zum füllen des Memos (nicht daß das Programm "ewig" läuft)
Angehängte Dateien
Dateityp: exe test_674.exe (874,0 KB, 4x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
xml - MSXML alternative - Stack Overflow This thread Refback 28. Jun 2011 15:34

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 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-2025 by Thomas Breitkreuz