Einzelnen Beitrag anzeigen

sirarcher

Registriert seit: 7. Mär 2007
22 Beiträge
 
#5

Re: String Value prüfen auf XML Konformität

  Alt 14. Feb 2008, 13:52
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 />', '&#xA;');
    stlXmlFile.Strings[intCount] := objReplace.ReplaceWideStr(stlXmlFile.Strings[intCount], '<br>', '&#xA;');
    //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;
  Mit Zitat antworten Zitat