10

Pretty simple question, I'm writing an XML document and i'm not sure how to write "]]>" without it being seen as the end of the section.

robx
  • 2,221
  • 1
  • 14
  • 31
GBa
  • 17,509
  • 15
  • 49
  • 67

3 Answers3

19

You can do it like this:

]]>]]&gt;<![CDATA[

This ends up breaking the CDATA section in two parts, but it's what you have to do.

Greg Hewgill
  • 951,095
  • 183
  • 1,149
  • 1,285
9

I think

<![CDATA[]]]]><![CDATA[>]]>

is the way to go.

That is:

  • one CDATA section containing the literal string ]] (<![CDATA[]]]]>)
  • one CDATA section containing the literal string > (<![CDATA[>]]>)

In practice, there would probably be text before the first ]] and/or after the >

See more at http://en.wikipedia.org/wiki/CDATA#Uses_of_CDATA_sections

IMSoP
  • 89,526
  • 13
  • 117
  • 169
Henrik Paul
  • 66,919
  • 31
  • 85
  • 96
  • 4
    I don't know if this is the right answer or not, but if so, it's the worst right answer ever. (No offence intended...I'm commenting on the miserableness of the system, rather than your answer.) – Beska Feb 11 '09 at 18:43
5

You can't. CDATA doesn't provide any way to escape characters, so those characters will always represent the end of the CDATA section. You can, however, let them end the CDATA section, add "]]&gt;" and start a new one with "<![CDATA[".

This way the String "]]>]]&gt;<![CDATA[" has almost the effect of being an escape for "`]]>" in a CDATA section.

Joachim Sauer
  • 302,674
  • 57
  • 556
  • 614