No necesita declarar una entidad en su DTD, o incluso usar una DTD. Probablemente no necesites usar la representación Unicode del personaje. Usted ciertamente no necesita usar una sección CDATA.
Lo que debe hacer es usar un DOM para compilar su XML en lugar de tratar de compilarlo con la manipulación de cadenas. El DOM solucionará este problema por ti.
En C#, este código:
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);
produce esta salida:
<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>
Como se puede ver en el primer ejemplo, el carácter » es perfectamente legal en texto XML. Pero no creo que estés tratando de representar a ese personaje.
Creo que estás tratando de hacer lo que está en el segundo ejemplo, basado en el mensaje de error que informaste. Está intentando representar la cadena de caracteres »
. La forma correcta de representar esa cadena de caracteres en texto XML es escapando del signo y; por lo tanto: &raquo;
.
Así que si debe utilizar la manipulación de cadenas para compilar su XML, simplemente asegúrese de escapar de cualquier símbolo en sus datos de origen. No para aclarar el punto, pero si estuvieras usando un DOM, esto se habría hecho automáticamente.
Una cosa más. Es bastante probable que en su pregunta original, que ahora dice "Estoy usando», lo que en realidad mecanografió es "Estoy usando & raquo;". La publicación actual no se ve así, sin embargo. Si necesita representar texto literalmente en el marcado, enciérrelo en los puntos atrás; de lo contrario, las entidades HTML se convertirán a su representación de caracteres cuando se represente la publicación.
estoy definiendo como ». Comprobado dos veces y no, no olvide el punto y coma que se perdió cuando pegué aquí. – BillZ