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.