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
Antwort Antwort
Seite 18 von 26   « Erste     8161718 1920     Letzte »    
Benutzerbild von himitsu
himitsu

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

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
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 10. Sep 2009, 21:50
!!! ACHTUNG !!!
In der aktuellen Version gibt es einen Bug, welcher bei Dateien über 32 KB (der internen Puffergröße) Auftritt.

Bisher dachte ich, dieses liegt an einer meiner Testdateien, welche womöglich inkorrekte Daten enthält (welche ich jedoch nie fand),
da sich bisher sonst noch keiner über diesen Fehler beschwerte.

Bei der Umstellung der Codes stellte sich aber raus, daß es doch ein Bug beim Nachladen des Puffers ist,
welcher Auftritt, wenn rein zufällig der Text eines Attributes über die Puffergrenze ragt und an dieser Stelle nachgeladen werden mußte.


In den neuen Codes ist der Fehler nun behoben (es dauert aber noch etwas, bis es fertig zum Hochladen ist),
aber leider finde ich die betreffende Stelle nicht im alten/aktuellen Code.


Also unter 32 KB gibt es diesbezüglich keine Probleme und bei größeren Dateien tritt er wohl recht selten auf.
Wenn ich das auf meine über 312 MB an Testdateien beziehe, dann werden über 95% davon, trotzt Bug, erfolgreich gelesen.
Außerdem existiert dieser Bug schon von Anfang an und es gab dennoch keine beschwerden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 17. Sep 2009, 00:09
Der neue interne Parser (TXReader) und sein Gegenstück (TXWriter) sind hoffentlich fertig.

- TXMLFile und Co. scheint, nach dem Umbau, nun auch wieder zu laufen
- hab dort unter Anderem das Parsen ausgebaut und in extra Klassen verlagert
- so kann ich demnächst (möchte nur noch einige Tests machen) diesen gemeinsamen Parser auch in TSAXFile einbauen und es hat dann nicht mehr jeder seine eigene Parser-Version
- TSAXFile läuft aber aktuell nicht, da ich wegen nun fehlender Strukturen so Einiges auskommentieren mußte
- die ganzen Interfaces und zugeförige Codes/Umleitungen wurden entfernt
- die Tools wurden in eigene Units ausgelagert
- die mindestens benötigten Hauptunits wären: himXML.pas, himXML_Lang.pas und himXMLCheck.inc

- nja, werd' noch etwas Zeit benötigen, bis wieder alles richtig läuft ... ist halt viel geändert wurden,
aber an den öffentlichen Interfaces der Hauptklassen wurde kaum was verändert
- nur bei der Record-Serialisierung wurde das InfoRecord durch eine Klasse ersetzt, welche sich nun selbst verwaltet und dafür entfiehl der InfoRecord-Creator aus/in der Demo
- und der letztens erwähnte Bug is weg (na mal sehn, welche Neuen dafür nun reingekommen sind )

Anhang (Beta) zum Reinschnuppern liegt im 1. Beitrag
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 17. Sep 2009, 20:09
kleine Fehler behoben (Dateien siehe Post #1)

* so wurden z.B. die Texte von Kommentaren und CDATA-Bereichen als Extra-Node gespeichert
* die ParsedSingleTags werden auch wieder unterstützt, auch wenn die wohl keiner nutzt,
da man sowas wie
(aus HTML und nicht als geschlossener EinzelTag gekenneichnet, also nicht als
) in XML normalerweise nicht antrifft
* und andere Kleinigkeiten



Nun noch der Hauptgrund dieses Posts ... mal eine Frage

Und zwar suche ich einen/zwei Namen für neue Properties,
welche in Verbindung mit der Textformatierung und der grad eingebauten Normalisierung stehen.

einmal suche ich einen Namen für diese Formatierung, wo jedes Attribut eines Nodes in einer eigenen Zeile steht
XML-Code:
<node
  attr1 = "text"
  attr2 = "text"
  attr3 = "text">

statt

<node attr1="text" attr2="text" attr3="text">
und ein Name fpr eine Option, wo der NodeText in eine eigene Zeile rutscht
XML-Code:
<node>
  text
</node>

statt

<node>text</node>
(diese Opionen können dann für jeden Node getrennt zugeschaltet werden)

praktisch wie man es von hier kennt, damit die Dateien dann eventuell menschenlesbarer werden
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    [color=#0000ff]version="0.0.0.0"
    processorArchitecture="X86"
    name="Private.Unbekannt.MeineBeispielApp"
    type="Win32"[/color]/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          [color=#0000ff]level="asInvoker"
          uiAccess="false"[/color]/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        [color=#0000ff]type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"[/color]/>
    </dependentAssembly>
  </dependency>
</assembly>
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: himXML (gesprochen himix ML)

  Alt 17. Sep 2009, 20:20
Hallo himitsu,

was hältst du von "WrapAttributes" und "WrapText"?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 17. Sep 2009, 21:03
hmmm, klingt schonmal nicht schlecht,
wobei WrapText irgendwie nach einer weiteren noch unbekannten Option klingt, welche ebenfallt fehlt

Es gibt ja Editoren (dazu gehört auch Delphi's IDE), welche nicht mit zu langen Zeilen klarkommen (z.B. maximal 1024 Zeichen) und dafür bräuchte ich auch noch eine Option, um dieses zu (de)aktivieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von holliesoft
holliesoft

Registriert seit: 4. Apr 2005
Ort: Gau-Algesheim
250 Beiträge
 
FreePascal / Lazarus
 
#7

Re: himXML (gesprochen himix ML)

  Alt 17. Sep 2009, 21:15
Hi,

wie wäre es mit IndendNodeText?

Bin schon gespannt auf die Version mit den neuen Optionen. Werde dann auch nochmal Paypal bemühen

Grüße
Patrick
  Mit Zitat antworten Zitat
GerMan62

Registriert seit: 25. Okt 2006
9 Beiträge
 
#8

Re: himXML (gesprochen himix ML)

  Alt 19. Sep 2009, 08:05
Hallo,

geht die neue Beta auch für Delphi 7 oder Delphi 2007
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: himXML (gesprochen himix ML)

  Alt 19. Sep 2009, 08:31
Für 2007 dürfte sie gehn

Hab es nicht nochmal getestet, aber Turbo, 2006, 2007 und 2009 sollte (hoffentlich) gehn.
Für 2010 fehlen noch einige Sachen der neuen RTTI.
Bei 2005 hab ich absolut keine Ahnung, ob es geht ... kann, muß aber nicht.
Und vor 2006 gab es einige verwendete Sprachkonstrukte noch nicht, daraum geht es aktuell nicht, da es noch nicht für alles eine "Alternative" eingebaut ist.

Wenn es Probleme mit dem Record TIndex gibt, dann läßt sich dieser abschalten.
(einfach den Compilerschalter hxExcludeTIndex in den Projektoptionen eintragen)


Bin grad etwas mit PHP ausgelastet ... mal sehn wann/ob meine Webseite fertig ist, wo dann eine Online-Hilfe eingebaut wird.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
GerMan62

Registriert seit: 25. Okt 2006
9 Beiträge
 
#10

Re: himXML (gesprochen himix ML)

  Alt 19. Sep 2009, 20:14
Hallo,

beim Kompilieren der neuen Beta Version mit Delphi 2007 meldet er folgende Kompileranweisungen als unbekannt.

{$POINTERMATH OFF}
{$STRINGCHECKS OFF}

Wenn ich sie auskommentiere bringt er z.B. hier einen Fehler.

{$IF Declared(UnicodeString)}
----> varUString, varUString or varByRef: Begin
_Attributes['variant'] := 'WideString';
If TVarData(V).VType and varByRef = 0 Then
Text_S := UnicodeString(TVarData(V).VUString)
Else Text_S := PUnicodeString(TVarData(V).VPointer)^;
End;
{$IFEND}

[DCC Fehler] himXML.pas(5110): E2003 Undefinierter Bezeichner: 'varUString'


Insgesammt bringt er so ca. 28 Fehler.

Kannst Du mir da bitte etwas helfen.

Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 18 von 26   « Erste     8161718 1920     Letzte »    


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