XML Library
Hier ist die XMLLib zu finden für die Nutzung unter Delphi ohne DLL Abhängigkeiten. Da ich nun doch immer mal wieder an den Bibliotheken sitze und auch aktuell gerade wieder eine Anfrage zur kommerziellen Nutzung erhalten habe, habe ich die Bibliotheken nun unter die Projekte-Seite geschoben und aufgeteilt. Hier findet man nun die XMLLib.
Versionstand: Dokumentation (v1.92 vom 5. Mai 2010) und Library (v1.94 vom 5. Mai 2010)
Mit Version 1.86 ist die Bibliothek nun auch unter RAD2009 funktional. Leider bin ich mit den Archiven und dem Entwicklungsstand durcheinander gekommen und hatte mit der Version 1.84 hier einen Zwischenstand veröffentlicht, welcher zwar ohne Warnungen und Hinweise unter RAD2009 compilert aber nur Müll bei der Dateiarbeit macht. Ich wurde netterweise von einem Kollegen darauf hingewiesen und dadurch musste ich feststellen, dass die richtige Version noch nichtmal in der Versionsverwaltung gelangt war. Mit der Version 1.87 ist die Bibliothek nun wie angekündigt von Delphi 4 bis 2009 (und C++Builder kompatibel) lauffähig. Die alten Versionen sind nun auch weiterhin unten aufgeführt. Mit der Version 1.90 funktioniert nun auch das Entity Coding wieder richtig und die geschriebenen XML Dateien sind auch mit der UTF-8 Kodierung wieder gültig. Version 1.91 und 1.92 beheben zwei kleinere Fehler (z.B. CDATA handling) und letztere fügt noch Unterstützung für das Windows-1252 Zeichenkodierung hinzu. Diese wird u.a. von MSBuild Projektdateien von Visual Studio benutzt. Mit Version 1.94 wurde vor allem ein Fehler in der Handhabung der Standard Entities behoben, welcher beim Speichern in ungültigen XML Dateien endete.
Bibliothek
XMLLib v1.94 (30.06.2010)
XMLLib v1.92 (09.05.2010)
XMLLib v1.91 (11.01.2010)
XMLLib v1.90 (09.12.2009)
XMLLib v1.88 (14.09.2009)
XMLLib v1.87 (10.08.2009)
XMLLib v1.86 (06.08.2009)
XMLLib v1.84 (11.07.2009)
XMLLib v1.77 (16.03.2008)
Dokumentation
XMLLib v1.92 (09.05.2010) HTML Documentation
XMLLib HTML Dokumentation (16.02.2008)
Die Bibliothek ist für die private und nicht kommerzielle Nutzung frei verfügbar. Bei der kommerziellen Nutzung ist nur die Benachrichtigung bzw. Genehmigung meinerseits vor der Verwendung von nöten. Diese ist geschieht aber im Normalfall schnell und unkompliziert per e-mail oder anderen Kontaktmöglichkeiten. Bisher war dies noch nie negativ bescheinigt worden. Nähere Informationen dazu sind im Header der XMLLib.pas zu finden.
Auch unter RAD2009 kann die Bibliothek nicht mit UTF-16 oder UTF-32 Dateien umgehen (also mehr als 1 Byte pro Zeichen).
Hinweis
Es ist ein DOM Parser und ist von daher weder als Datenbank geeignet, noch als Parser von großen Dateien.
Hallo Dominik,
Also da muss ich wirklich nochmal drüber nachdenken, da die Methode LoadFromString() einen gültigen XML Inhalt laden will, welcher dann natürlich im XML Header ein eigenes Encoding angibt. Diese Angabe ist optional, von daher ist das Encoding, wenn in der XML Processing Instruction nicht angegeben, automatisch UTF-8. Somit ist es korrekt, wenn er danach den übergebenen Inhalt sofort wieder als UTF-8 betrachtet. Wenn das ISO-8859-1 sein sollte, dann muss dies in der XML Processing Instruction als < ?xml encoding="ISO-8859-1"> angegeben werden. Würde ich das nicht machen und die zuvor zugewiesene Encoding ID strikt nutzen, dann würde ich mich nicht mehr an den XML Standard halten. Auch ist die Frage wie ich mich verhalte wenn gegensätzliche Informationen in den Processing Instructions angegeben werden?
Grüße,
Muetze1
Hallo,
ich glaube, ich habe einen Fehler gefunden beim Encoding mit ISO-8859-1 gefunden. Beispiel:
uses
StrAdapterISO8859_1
Lib := TXMLLib.Create;
Lib.EncodingID := ‘ISO-8859-1′;
Lib.LoadFromString(xml_string_mit_umlauten); // <- Bäm
In dieser Zeile kommt die Meldung "illegal character "ö" found!".
Es scheint so, dass er als Encoding UTF-8 benutzt, obwohl ich ISO-8859-1 angegeben habe.
Dominik
Die Sache ist legitim, da ich die Kontrolle über den Root Node habe. Auch im Setter wird dort immer die Instanz entsprechend gehandelt, so dass es zu keiner Überlappung oder toter Instanz kommt (außer jemand gibt mutwillig von außen den Knoten frei (TXMLLib.Root.Free)). Hier weiß ich nicht genau warum die Anweisung dort reingekommen ist mit dem Freigeben, aber sie ist dort definitiv fehl am Platze und noch überflüssig. Von daher nicht auf FreeAndNil() ändern sondern die gesamte Zeile streichen.
Und natürlich nochmal Danke für den Hinweis. Ich werde mich nächste Woche vor der Veröffentlichung der neuen Version bei Dir melden.
Ahhh, also ein fRoot.Free statt ‘nem FreeAndNil(fRoot).
Na dann isses Gut, daß ich deine Lib aus Neugierde mal mit bei mir aufgenommen hab … dadurch ist es nämlich aufgefallen.
Nein, natürlich nicht. Ich schau es mir gleich mal an. Danke für den Hinweis!
Update Ganz böses foul. Ich habe den Fehler gefunden, es muss die “fRoot.Free;” Anweisung in Zeile 2091 der XMLLib.pas entfernt werden. Ich kann diese Änderung zwar machen, aber keine neue Version veröffentlichen, da ich derzeit keinen Zugriff auf das Repository habe. Die neue Version wird dann Anfang nächster Woche (2. KW) von mir hier online gestellt.
Ist das so geplant, daß man eine Exception bekommt, wenn schon/noch Nodes im Dokument sind und man versucht was Neues zu laden?
EAccessViolation: Zugriffsverletzung bei Adresse 00440E1F in Modul ‘CheckLibs.exe’. Lesen von Adresse 00000006
einfacher Versuch:
XML := TXMLLib.Create;
XML.Root := TXMLNode.Create;
XML.LoadFromFile(‘Test.xml’);
Ich habe das von extern bestätigt bekommen. Ich werde mich aber nun nochmal explizit ransetzen und unter Delphi 4 und 5 nachtesten. Ich melde mich dann nochmal – vielleicht dann mit einer aktualisierten Version. Vielen Dank für den Hinweis!
Update
So, habe nun die XMLLib unter Delphi 4, 5, 7, 2007 und 2009 sowie C++Builder 2007 und C++Builder 2009 getestet und angepasst. Die Bibliothek ist nun geprüft unter Delphi 4 bis 2009 lauffähig. Ich kann das Update bzw. die neue Version aber erst am Montag hier hochladen, da ich vorher keinen Zugriff auf das Hauptrepository habe.
Update 2
Hiermit erledigt. Neuste Version ist oben zu finden (v1.87).
Hallo,
bist du sicher, dass die aktuelle Version unter Delphi5 funktioniert?
Ich kriege nämlich beim Compilieren eines sehr einfachen Projekts (nur Einbindung von XMLLib) einen Compilerfehler “Ungültige Compileranweisung ‘IF’” mit Bezug auf diese Zeile {$IF RTLVersion >= 15.0} in StrAdapter.pas
Für alle früheren Anwender der Library wurde der Support nie eingestellt. Es wird nur keine aktive Weiterentwicklung mehr betrieben. Fehler werden aber trotzdem auch im alten Stand weiterhin behoben.
Jetzt haste dich ja doch überreden lassen den Support nicht einzustellen… *G*
Wie schon im Eintrag sowie im letzten Kommentar vermerkt, werden die Bibliotheken nicht mehr öffentlich weiter gepflegt. Es wurde schon eine komplette Neuentwicklung fertig gestellt, aber diese ist öffentlich verfügbar.
Ich weise nochmals darauf hin diese Bibliotheken nicht mehr für Neuentwicklungen zu nutzen.
Ansonsten fehlte mir bisher grundsätzlich das RAD2009 um dies zu tun, aber da dies nun bei mir eingetroffen ist werde ich mal schauen ob ich noch die Kompatibilität zur 2009er Version herstellen kann.
Super XML Bibliothek. Hoffe das du demnächst die Lib auch für RAD 2009 updatest
90 MB sind auch nicht gerade wenig und es ist ein DOM Parser. Bei Größen von über 10-20 MB ist es komplett der falsche Ansatz, es mit einem DOM XML Parser zu versuchen. Dazu gibt es die SAX Parser, welche genau dazu implementiert wurden.
Man nimmt auch nicht einen Citroen AX um einen Umzug einer 120 qm Wohnung durchzuführen sondern eher einen Transporter. Von daher ist der Lösungsansatz falsch.
Die Library ist auch vor allem für Konfigurationsdateien, RSS Feeds, etc gedacht, also kleine Dinge. Die Library versucht auch erst gar nicht Standards komplett zu implementieren, sondern stellt einen kleinen Helfer ohne Abhängigkeiten dar.
Es gibt zwar bereits eine komplett neue XMLLib, welche einen DOM wie auch SAX Parser vereint und für solche Datenmengen entsprechend geeignet wäre, aber diese ist nicht öffentlich verfügbar. Ich empfehle weiterhin die entsprechenden anderen bzw. Referenzimplementierung für die Arbeit mit XML unter Delphi. Ich hatte diese immer und explizit auf der HP verlinkt und auch auf diese hingewiesen.
Die Entwicklung der Bibliotheken wurde öffentlich komplett eingestellt, somit sollte auch kein neues Projekt damit angefangen werden.
Hab mit der TestApp Treeview eine XML anzeigen wollen die 90MB groß ist. Nach 20 min. mit 99%CPU-Auslastung und 450MB Speicherverbrauch hab ich es aufgegeben und die Anwendung abgeschossen. Schade.