visual valid see remarks method generate example cref comment comentarios c# xml dtd

valid - see cref c#



Referencia a excepción de entidad no declarada al trabajar con XML (8)

Estoy tratando de establecer el innerxml de un xmldoc pero obtengo la excepción: Referencia a la entidad no declarada

XmlDocument xmldoc = new XmlDocument(); string text = "Hello, I am text &alpha; &nbsp; &ndash; &mdash;" xmldoc.InnerXml = "<p>" + text + "</p>";

Esto arroja la excepción:

Referencia a la entidad no declarada ''alfa''. Línea 2, posición 2 ..

¿Cómo voy a resolver este problema?


Intenta reemplazar y Alpha con

&#913;


La respuesta anterior es correcta. Otra alternativa es vincular su documento html a la DTD donde se definen esas entidades de caracteres, y esa es la definición XHTML DTD estándar. Su archivo xml debe incluir la siguiente declaración:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">


También puede configurar InnerText como "Hello, I am text α – —" , haciendo que XmlDocument los escape automáticamente. Creo.


XML, a diferencia de HTML no define entidades (es decir, referencias nombradas a caracteres UNICODE) tan & alpha; & mdash; etc. no se traducen a su personaje correspondiente. Debe usar el valor numérico en su lugar. Solo puedes usar & lt; y & amp; en XML

Si desea crear HTML, use un HtmlDocument en su lugar.


En .Net, puede usar la clase System.Xml.XmlConvert :

string text = XmlConvert.EncodeName("Hello &alpha;");

Alternativamente, puede declarar las entidades localmente colocando las declaraciones entre corchetes en una declaración DOCTYPE. Agregue el siguiente encabezado a su xml:

<!DOCTYPE documentElement[ <!ENTITY Alpha "&#913;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;"> ]>

Haz un google en "entidades de caracteres html" para las definiciones de entidad.


El uso de un HtmlDocument no era adecuado en mi situación, nuestro sistema tenía un XmlUrlResolver personalizado que utilizamos para cargar el xml.

//setup public class CustomXmlResolver : XmlUrlResolver { /* ... */ } String originalXml; //fetched xml with html entities in it var doc = new XmlDocument(); doc.XmlResolver = new AdCastXmlResolver(); //making use of a transitional dtd doc.LoadXml("<!DOCTYPE html SYSTEM /"xhtml1-transitional.dtd/" > " + originalXml);


Use la cadena System.Net.WebUtility.HtmlDecode (cadena) que decodificará todos los caracteres codificados por la entidad HTML en su variante Unicode. Está disponible en dot.net framework 4


Si desea utilizar los nombres de las entidades HTML a los que está acostumbrado, el W3C lo ha cubierto y ha producido "Definiciones de entidades XML para caracteres" http://www.w3.org/TR/xml-entity-names/ , que esencialmente es una lista de entidades nombradas muy similar a las que tiene HTML. Pero como se mencionó anteriormente, esto no está integrado en XML, y necesita ser apoyado explícitamente por las aplicaciones XML que desean usar estas entidades nombradas.