Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#12

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 15:55
Achso, du willst also nur das "invalide" XML nur für das externe Tool schreiben können? Sag das doch gleich!

Wenn das externe Tool die CDATA-Tags nicht stören (sollte es eigentlich nicht), dann kannst du das über einen ntCdata-Node machen, der wandelt die Entities ja nicht um, ausserdem bekommst du am Schluss eine valide XML-Datei:

Delphi-Quellcode:
 
  n3 := n2.AddChild('p'); // Neuer Absatz bzw. zusammengehöriger Text

  s := 'Dies ist normaler Text ';
  s := s + '<bold>und dies wird als Fettschrift interpretiert</bold> ';
  s := s + 'und hier gehts wieder normal weiter.';

  // hier wird der CDATA-Node erzeugt, mit s gefüllt...
  n_cdata := My_XML.CreateNode(s,ntCData);

  // ...und n3 (dem p-tag) als childnode übergeben
  n3.ChildNodes.Add(n_cdata);

  My_XML.SaveToFile('Test.xml');
in der Test.xml steht dann folgendes:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<body>
  <start>
   <p>
     <![CDATA[Dies ist normaler Text <bold>und dies wird als Fettschrift interpretiert</bold> und hier gehts wieder normal weiter.]]>
   </p>
  </start>
</body>

Wenn das dein externes Tool nicht frisst, würde ich als zweiten Schritt versuchen, den kompletten <body>-Inhalt als CDATA zu deklarieren.
Wenn das auch nicht geht, ist dein externes Tool etwas "schwindlig" und hat seine eigenen XML-Parse-Regeln, die nicht der Norm entsprechen

Dann hilft nur noch eines:
Nach dem Schreiben der test.xml durch das XMLDocument mach die Datei nochmal mit nem Stream oder dergleichen, auf und entferne per StringReplace die "<![CDATA[" und "]]>", anschliessend neu speichern. Aber beim speichern dann auf die UTF8-Codierung achten.

Geändert von blackfin (31. Mai 2011 um 16:10 Uhr)
  Mit Zitat antworten Zitat