Вам не нужно объявлять сущность в вашем 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, это было бы сделано для вас автоматически.
Ещё одна вещь. Вполне вероятно, что в вашем первоначальном вопросе, который теперь читается «Я использую», то, что вы на самом деле , напечатано: «Я использую & raquo;». Фактическое сообщение не похоже на это. Если вам нужно представлять текст буквально в уценке, приложите его в обратные ссылки; в противном случае, HTML-объекты будут преобразованы в их представление символов, когда сообщение будет показано.
я определяю его как ». Двойной флажок, и я не забыл, что точка с запятой просто пропустила, когда я вставил сюда. – BillZ 2008-10-16 16:08:12