Zitat von
Muetze1:
Ich frage mich, warum du diese Prüfung machen müsstest? Der Text sind Daten und werden somit an einen Knoten als Wert weiter gegeben. Dabei hat die
XML Bibliothek dafür zu sorgen, dass die eingehenden Daten entpsrechend escaped werden (also [b] -> <b>) und somit hat der Parser auch kein Problem. Die
XML Bibliothek stellt sich schliesslich nicht selber ein Bein. Beim einlesen einer solchen Datei wandelt die Bibliothek beim Zugriff auf den Knotenwert alles wieder zurück und es erscheint der Originale Inhalt der beim Schreiben dem Knotenwert zugewiesen wurde...
Hallo,
ich habe es nun mit dem Parsen mittels
XML umgesetzt:
Delphi-Quellcode:
var
xmlDoc: IDOMDocument;
begin
try
xmlDoc := LoadXMLDocument(strFileName).DOMDocument;
except
on e:
Exception do begin
//Ausgabe bzw. Weiterverarbeitung von: e.Message
...
vorher habe ich alle schon escaped Daten zurückgesetzt.
Hintergrund war/ist, das die User gewisse Tags in einem Programm verwenden dürfen (
html tags) zur Darstellung im Firmeninternen Intranet. Mittels diesen Daten werden dann aber auch PDF's generiert wo der Text auch dort so Formatiert dargestellt wird.
Nur beim PDF erzeugen brauche ich ein sauberes
XML File, im Intranet ist es dem Browser (blöd gesagt) egal, der mache keine Probleme.
Aber somit kann ich das ganze
XML prüfen. Danke nochmals fürn tipp, hätte selber daran denken können/sollen.
PS: Mit folgendem Code wandel ich vorher die Zeichen (welche zugelassen sind) zurück:
Delphi-Quellcode:
var
stlXmlFile: TStringList;
intCount: integer;
strMeldungsText:
string;
xmlDoc: IDOMDocument;
begin
//XML DATEN PRÜFEN (EIGENE KLASSE MACHEN)
stlXmlFile := TStringList.Create;
stlXmlFile.LoadFromFile(strFileName);
for intCount := 0
to stlXmlFile.Count -1
do begin
//BR
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
<br />', '

');
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
<br>', '

');
//FETT
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
<b>', '
[b]');
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
</b>', '
[/b]');
//UNTERSTRICHEN
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
<u>', '
<u>');
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
</u>', '
</u>');
//KURSIV
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
<i>', '
[i]');
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
</i>', '
[/i]');
//LEERZEICHEN
stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '
%SPACECHARACTER%', '
*');
end;
stlXmlFile.SaveToFile(strFileName);
try
xmlDoc := LoadXMLDocument(strFileName).DOMDocument;
except
on e:
Exception do begin
//Wenn keine Werte zurückkommen muss das Programm beendet werden.
strMeldungsText := '
<FONT face="Arial"><FONT size="18">'
+ '
[b]XML Check (Custom formating tag''
s)[/b]</FONT>'
+ '
'
+ '
<FONT size="10">'
+ '
<FONT color="#FF0000">[B]<textarea>' + e.
Message + '
</textarea>[/B]</FONT>'
+ '
'
+ '
Please contact your key user or IT adminstrator.'
+ '
</FONT></FONT>';
Main.ShowWarningWindow(strMeldungsText);
end;
end;