Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi IXMLDocument versionsunabhängig? (https://www.delphipraxis.net/21829-ixmldocument-versionsunabhaengig.html)

tommie-lie 8. Mai 2004 22:45


IXMLDocument versionsunabhängig?
 
Hi,

Ich brauche als XML-Parser eigentlich nur das IXMLDOMDocument aus MSXML2.0 (und nicht das IXMLDOMDocument2, das erst seit MSXML3 dabei ist).
Nun steht da aber im SDK geschrieben, daß seit MSXML4.0 die GUIDs und ProgIDs nicht mehr versionsunabhängig sind. Was bedeutet das für mich als COM-Neuling? Ich will das Interface unabhängig von der Version der implementierenden Bibliothek nutzen. Will heißen, ich hätte gerne ein XMLDOMDocument, daß auf jedem System funktioniert, auf dem irgendeine MSXML-Version seit 2.0 läuft. Geht das irgendwie, wenn ja, wie?

Sinn der Übung ist es, den Anwendern zu ersparen, eine aktuelle MSXML-Library runterzuladen, wenn sie nicht 4.0 haben, da eine XML-Bibliothek schon seit Win98 beim System dabei ist (dort ist es MSXML2.0).


Tschüß
Thomas


P.S.: Bitte nicht auf OmniXML verweisen, irgendwie gefällt mir das dortige Interface nicht (ist so unschön zu programmieren :mrgreen:)

MathiasSimmack 9. Mai 2004 07:32

Re: IXMLDocument versionsunabhängig?
 
Zitat:

Zitat von tommie-lie
Nun steht da aber im SDK geschrieben, daß seit MSXML4.0 die GUIDs und ProgIDs nicht mehr versionsunabhängig sind. Was bedeutet das für mich als COM-Neuling?

Ich interpretiere das so, dass bspw. bei der Installation von MS XML 3 selbiges auch die XML2-Interfaces auf sich registriert, so dass die DLL der 2er-Version mehr oder weniger nicht mehr gebraucht wird. Jemand, der XML 2 hat, benutzt eben diese DLL. Bei jemand mit XML 3 würde in dem Fall das etwas neuere Interface von XML 3 verwendet werden.

XML 4 dagegen registriert sich wohl ein eigenes Interface, das unabhängig von den Vorversionen ist.

Zitat:

Sinn der Übung ist es, den Anwendern zu ersparen, eine aktuelle MSXML-Library runterzuladen, wenn sie nicht 4.0 haben, da eine XML-Bibliothek schon seit Win98 beim System dabei ist (dort ist es MSXML2.0).
Also, das sehe ich etwas anders. Es gibt mittlerweile 4 Servicepacks für XML 3 und 2 für XML 4. Nicht mitgezählt die kleinen Patches. Da würde ich dann eine halbwegs aktuelle Version vorziehen, und ich würde den Anwender dann auch dazu "zwingen" (oder sagen wir: nachdrücklich bitten), eine aktuelle Version zu verwenden. Wenn du ein wenig Versionsunabhängigkeit haben willst, dann benutze XML 3. Das wird IMHO auch beim IE5 und höher eingerichtet.

Ich müsste mal schauen, ich habe irgendwo mal ein Redist-Paket gesehen, das nur die Bibliotheken für XML 3 enthielt. Das war also nicht so groß. Aber ich weiß jetzt nicht ob sich das Microsoft nur für eigene Zwecke geschrieben hat, oder ob man das auch als Entwickler benutzen und bspw. dem eigenen Setup beilegen darf.

tommie-lie 9. Mai 2004 12:58

Re: IXMLDocument versionsunabhängig?
 
Ahh, jetzt habe im SDK verschiedene ProgIDs für die gleiche Klasse gefunden. Anscheinend gibt es für ältere Interfaces verschiedene IDs für das gleiche Objekt. Eine trug dabei die Versionsnummer und die andere nicht (ProgIDs). So gibt es beispielsweise aus der MSXML3.0 ein "MSXML2.DOMDocument" und ein "MSXML2.DOMDocument.3.0". Offenbar kann man mit letzterer explizit die Version festlegen (was passiert mit "MSXML2.Document.2.6" wenn MSXML3 installiert wurde, daß ja anscheinend die alten Versionen überschrieben hat?) und erstere benutzt die Standard-Implementierung (die aktuellste im System registrierte).
Bei der Dokumentation zum MSXML4 fehlen die Angaben der Versionslosen Interfaces. Anscheinend ist es weiterhin das gleiche Schema (z.B. "Msxml2.DOMDocument.4.0"), aber MSXML registriert nicht mehr die generischen (versionslosen) Interfaces sondern überlässt sie den Vorgängern (MSXML3).

Zitat:

Zitat von MathiasSimmack
XML 4 dagegen registriert sich wohl ein eigenes Interface, das unabhängig von den Vorversionen ist.

Also müsste MSXML4 auch automatisch MSXML3 mitinstallieren, damit alte Anwendungen weiterhin laufen (sofern MSXML3 nicht schon auf dem System vorhanden ist), wenn meine obigen Vermutungen stimmen.

Demnach müsste es eigentlich genügen, wenn ich mein Objekt über die GUID von "MSXML2.DOMDocument" erzeuge, ohne irgendwelche Interfaceversion dahinter. Oder hab' ich was übersehen?


Zitat:

Zitat von MathiasSimmack
Es gibt mittlerweile 4 Servicepacks für XML 3 und 2 für XML 4. Nicht mitgezählt die kleinen Patches. Da würde ich dann eine halbwegs aktuelle Version vorziehen, und ich würde den Anwender dann auch dazu "zwingen" (oder sagen wir: nachdrücklich bitten), eine aktuelle Version zu verwenden.

Es ist kein sicherheitsrelevantes Programm, im Prinzip ist eine XML-Datei auch schon mehr als Overkill für den Anwendungszweck. Wenn also ein kleiner Fehler in der Bibliothek ist, wäre das nicht schlimm; hauptsache er liest die Daten, die ich brauche, korrekt ein (und so ausgefallen oder komplex ist die Syntax der XML-Dokumente nicht).
Andernfalls würde ich dir natürlich zustimmen und auch die MSXML4 benutzen, wenn die Dateien mehrere Megabyte groß wären und Gebrauch von Schemas, DTDs und sonstigem Getier machen würden.

MathiasSimmack 9. Mai 2004 14:43

Re: IXMLDocument versionsunabhängig?
 
Zitat:

Zitat von tommie-lie
Also müsste MSXML4 auch automatisch MSXML3 mitinstallieren, damit alte Anwendungen weiterhin laufen (sofern MSXML3 nicht schon auf dem System vorhanden ist), wenn meine obigen Vermutungen stimmen.

Nein, das müsstest du tun bzw. der Anwender. XML 4 registriert nur die Interfaces für sich selbst und lässt andere außen vor. Im PSDK kannst du das auch nachlesen:
Zitat:

Zitat von PSDK
After you install MSXML 4.0, applications that use version-independent ProgIDs continue to run using the latest version of MSXML prior to version 4.0. To use version 4.0, applications must be written to use the appropriate version-dependent class IDs (CLSIDs) and ProgIDs that reference Msxml4.dll.

This ensures stability in your applications. It also enables customers to implement new and improved versioning solutions by using the side-by-side installation technology provided with Windows XP.

(ms-help://MS.PSDK.1033/xmlsdk/htm/sdk_guidprogid_367i.htm)

Zitat:

Zitat von tommie-lie
Demnach müsste es eigentlich genügen, wenn ich mein Objekt über die GUID von "MSXML2.DOMDocument" erzeuge, ohne irgendwelche Interfaceversion dahinter. Oder hab' ich was übersehen?

Das ist korrekt, setzt aber wie gesagt voraus, dass eine entsprechende "alte" Version vorhanden ist. Ist aber kein Problem, denke ich. Hier im Forum findest du irgendwo eine "DoesXMLExist"-Funktion, deren Class-ID (benutzt wird die von "DomDocument40") du gegen die von dir benutzte unabhängige ID austauschen kannst.

tommie-lie 9. Mai 2004 15:14

Re: IXMLDocument versionsunabhängig?
 
Zitat:

Zitat von MathiasSimmack
Hier im Forum findest du irgendwo eine "DoesXMLExist"-Funktion, deren Class-ID (benutzt wird die von "DomDocument40") du gegen die von dir benutzte unabhängige ID austauschen kannst.

Jupp, die kenne ich schon ;-)
Außerdem hätte ich sowas auch noch selbst hingekriegt. Aber das wäre dann das erste Programm, wo es tatsächlich heißt "Bitte Installieren Sie Bibliothek X in einer Version kleiner als Y.ZZ" :mrgreen:.

Danke für deine Hilfe!

MathiasSimmack 9. Mai 2004 17:19

Re: IXMLDocument versionsunabhängig?
 
Zitat:

Zitat von tommie-lie
Jupp, die kenne ich schon ;-)
Außerdem hätte ich sowas auch noch selbst hingekriegt.

Daran hatte ich keinen Zweifel. Ich wollte dich nur darauf hinweisen. Als ich mit dem MS-XML-Parser anfing, da habe ich auch überlegt, wie man sicherstellen könne, dass das Programm nur dann wirklich funktioniert, wenn auch das Interface vorhanden ist. Na ja, ... war wohl ein damaliger Geistesblitz ... :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.

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