кодировать ]]› в cdata

Если я создаю XML и использую <![CDATA[...]]>, как мне кодировать данные, которые могут включать подстроку ]]>? это будет ]]&gt;? Я спрашиваю, потому что всегда думал, что содержимое CDATA — это буквальное содержимое.


person Jeremy    schedule 12.02.2009    source источник
comment
Дублировать stackoverflow.com/questions/538163/   -  person tehvan    schedule 12.02.2009


Ответы (4)


Это не очень эффективно, или легко читается, или что-то в этом роде, но появляется подход к этому чтобы писать..

]]]]><![CDATA[>
person Sciolist    schedule 12.02.2009

вы можете просто использовать два тега cdata, первый из которых содержит ]] а второй содержит >

person Kim Stebel    schedule 12.02.2009

CDATA в некотором смысле является буквальным содержимым, но, конечно, должен быть какой-то способ отметить конец блока CDATA, и все, что вы выберете, должно быть каким-то образом представлено в вашей строке.

Когда мне пришлось иметь дело с XML-документами, содержащими CDATA внутри другого блока CDATA, как и вам, я сдался и закодировал все это как Base64. Затем другая сторона извлекает текст и декодирует его.

Base64 удобен, потому что он имеет общую поддержку и/или простые алгоритмы для кодирования и декодирования строк ASCII в него на многих языках, в моем случае C# и Javascript в приложении ASP.NET.

person Coxy    schedule 12.02.2009

Разве сущности не должны работать?

вот так: &gt;

или только один из них: ]]&gt;

93 для latin1, вам понадобятся объекты unicode при отправке данных в utf-8.

В качестве примечания, есть и другие символы, которые также запрещены в блоке CDATA, некоторые странные кавычки и символы управления потоком.

person jishi    schedule 12.02.2009