Hi Leute.
Ich habe ein paar kleine Fragen, weil ich mich (gezwungenermaßen!) erst seit letztem Freitag mit dem Thema
XML beschäftige. Also, grundlegende Probleme mit der
XML-Syntax und dem Aufbau usw. habe ich nicht. Ich habe die Typenbibliothek
Microsoft XML, v3.0 importiert, und damit lässt sich ja schön einfach arbeiten. Was ich aber wissen möchte:
1. Wie müsste eine Sicherheitsfunktion aussehen, die das Programm beendet, wenn auf dem Zielrechner kein MS-
XML v3.0 möglich ist. Kann ja durchaus passieren. Meine Idee wäre, dass ich dynamisch die Bibliothek "msxml3.dll" lade und bei einem Fehler das Programm entsprechend abbreche. Denn: wenn die
DLL nicht vorhanden, dann wird´s auch nix mit
XML? Ist das ein guter Gedanke, oder wie wäre es richtig?
2. Wie steht´s mit dem Zeilenumbruch? Ich habe bemerkt, dass mein
XML-Dokument eine lange Zeile ist. An sich nicht schlimm, aber prompt kam´s zu einem Problem bei dem Programm, dass auch auf die
XML-Datei zugreifen muss. Ich behelfe mir momentan so, dass ich den
XML-Code via "StringReplace" bearbeite. Will sagen: wenn ">" gefunden, dann mach ein ">#13#10" draus.
- Da wäre natürlich auch eine einfachere Idee genial, denn "StringReplace" kostet ein bisschen Zeit.
3. Grandios ist das Problem: ich muss auf eine
XML-Datei zugreifen, die nicht von mir ist. Es ist auch leider nicht möglich, diese Datei zu ignorieren und von Null anzufangen. Aus Versehen oder auch absichtlich wurden in dieser
XML-Datei die numerischen Attribute allerdings ohne Anführungszeichen gespeichert:
Code:
<FalscherTag value=1234/>
Laut
XML-Syntax wäre aber
Code:
<RichtigerTag value="1234"/>
korrekt. Da der
XML-Parser deswegen meckert, lade ich die Datei erst mal zeilenweise in ein String-Array, ergänze notfalls die Anführungszeichen und gebe sie dann erst an mein "DOMDocument" weiter. Geht das vielleicht auch einfacher und schneller?
4. Und generell: wie sieht eigentlich der korrekte Initialisierungscode aus? Ich habe dutzende Varianten im Web gesehen und mich erst mal für diese Variante entschieden:
Code:
[b]if[/b](CoInitialize([b]nil[/b]) = S_OK) [b]then[/b]
[b]try[/b]
xmldoc := CoDOMDocument.Create;
[color=#000080][i]// usw.[/i][/color]
[b]finally[/b]
[color=#000080][i]// CoUninitialize;[/i][/color]
[b]end[/b];
Das "CoUninitialize" musste ich z.B. ausklammern, weil´s beim Start von der Konsole (es soll auch nur Kommandozeilenprogramm bleiben!) regelmäßig Zugriffsverletzungen gab. Wer weiß, welche Variante richtig ist?
Wen der Hintergrund noch interessiert:
Nach über 2 Monaten hat sich Microsoft nun entschieden, mir die Genehmigung zur Benutzung zweier Tools nicht zu geben. Da ich die aber gebraucht hätte, um sog. "
HTML Help Collections" (das
PSDK ist eine solche!) zu erstellen, muss ich mir die
XML-Tools nun selbst schreiben. Ich bin inzwischen auch fertig.
Gestern habe ich spaßeshalber mal mein
PSDK de-registriert, und heute - nach Fertigstellung von "regcol.exe" - habe ich meine erste eigene Collection im System registriert. Geht also wunderbar. 8)
Nur die o.g. "Problemzonen" würde ich gern noch ausmerzen, damit die Tools auf möglichst allen Rechnern laufen. Dann steht einer Veröffentlichung inkl. Doku (und vielleicht auch Sourcen) nichts im Weg. Dann kann jeder Interessent eigene Collections zusammenbauen, ohne Microsoft um Erlaubnis fragen zu müssen.
Gruß,
Mathias.