Вам не нужно объявлять сущность в вашем DTD или даже использовать DTD. Вам, вероятно, не нужно использовать Unicode-представление символа. Вам определенно не нужно использовать раздел CDATA.
Что вам нужно сделать, это использовать DOM для создания вашего XML вместо того, чтобы пытаться создавать его с помощью манипулирования строками. DOM решит эту проблему для вас.
В C # этот код:
XmlDocument d = new XmlDocument();
d.LoadXml("<foo/>");
char c = (char)187;
d.DocumentElement.InnerText = "Here's that character: " + c;
Debug.WriteLine(d.OuterXml);
d.DocumentElement.InnerText = "Here it is as an HTML entity: »";
Debug.WriteLine(d.OuterXml);
производит этот вывод:
<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>
Как видно из первого примера, символ "совершенно допустим в тексте XML. Но я не думаю, что вы пытаетесь представить этот символ.
Я думаю, что вы пытаетесь сделать то, что во втором примере, основываясь на сообщении об ошибке, о котором вы сообщили. Вы пытаетесь представить строку символов »
. Правильный способ представления этой строки символов в тексте XML - экранирование от амперсанда; таким образом: &raquo;
.
Так что если вы должны использовать строковые манипуляции для создания своего XML, просто убедитесь, что вы избегаете любых амперсандов в ваших исходных данных. Не для того, чтобы понять смысл, но если бы вы использовали DOM, это было бы сделано для вас автоматически.
Еще одна вещь. Вполне вероятно, что в вашем исходном вопросе, который теперь гласит «Я использую», вы на самом деле напечатали «Я использую». Тем не менее, фактическое сообщение не выглядит так. Если вам нужно представить текст буквально в уценке, заключите его в кавычки; в противном случае объекты HTML будут преобразованы в их символьное представление при отображении сообщения.