PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XML: Wie ]]> in CDATA escapen?



Joghurt
07-09-2005, 15:49
Wenn ich einen beliebigen String in eine CDATA section knalle, kann es ja sein, dass dieser String die Zeichenfolge "]]>" enthält. Im XML-Standard wird dieses Problem nicht erwähnt, gibt es einen Quasistandard zum escapen, den die meisten XML-Engines verstehen?

Ich würde ansonsten eine regexp-Ersetzung s/(]]\)*)>/\1)>/ vornehmen und beim Auslesen dann s/(]]\)*)\)>/\1>/.

Alternativ könnte ich auch festlegen, dass das auf "]]" folgende Zeichen in jedem Falle escaped werden muss, ]]> würde dann zu ]]>, und dieses zu ]]> kodiert.

Lange Rede, kurzer Sinn: gibt es einen Standard, und wenn nein, welche der beiden Möglichkeiten würdet ihr nehmen?

Pingu
07-09-2005, 16:19
Steht doch im Standard:

Quelle: http://www.w3.org/TR/2000/REC-xml-20001006#dt-chardata
The ampersand character (&) and the left angle bracket (<) may appear in their literal form only when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they must be escaped using either numeric character references or the strings "&amp;" and "&lt;" respectively. The right angle bracket (>) may be represented using the string "&gt;", and must, for compatibility, be escaped using "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section.

Frage beantwortet?

Pingu

EDIT: Also ganz einfach alle > nach &gt; ersetzen.

Joghurt
07-09-2005, 16:38
Das hatte ich auch gelesen, mich wundert nur

dass dort steht "for compability", was heisst, das dieses ausschließlich notwending ist, um zu SGML kompatibel zu bleiben
&gt; in einem CDATA auftauchen kann und dort nicht für > steht
Within a CDATA section, only the CDEnd string is recognized as markup, so that left angle brackets and ampersands may occur in their literal form; they need not (and cannot) be escaped using "&lt;" and "&amp;". CDATA sections cannot nest., d.h. "]]&gt;" würde ebenso wie "]]>" als "[[&gt;" kodiert.
Der letzte Satz "CDATA section cannot nest" impliziert, dass dieses nicht offiziell vorgesehen ist

Pingu
07-09-2005, 16:47
Da zahlt es sich aus, daß ich auch solche Specs schreibe. Man muß immer alles lesen. In dem Abschnitt, welchen Du referenzierst, steht may. Das heißt man darf, aber man muß nicht.
Wenn man dagegen weiterliest (Referenz von mir), liest man ein must. Also man muß. Warum man muß, ist vollkommen egal. Man muß einfach.

Ich weiß Specs lesen ist manchmal eine Wissenschaft für sich. :rolleyes:

Pingu