primer lugar, la combinación de entidades externas e internas en "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp " "> ]
es innecesaria porque http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
incluye www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
que incluye <!ENTITY nbsp " ">
que es exactamente el mismo que el suyo.
Así que poco debe ser sólo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
En segundo lugar, XDocument no valida a un DTD por defecto. Sin embargo, puede Load
de un XmlValidatingReader
o XmlTextReader
con los ajustes apropiados
si es posible, [Si no es posible, que sea posible!] Que es una buena idea establecer el XmlReader para utilizar un XmlPreloadedResolver
, porque hay una Mucha gente golpea al viejo W3C en el URI de esa DTD y los archivos .ent que incluye, y están totalmente de acuerdo con que uses una copia local (por "totalmente bien" quiero decir que estarían muy contentos si todos dejaran de golpear su servidor tanto). Además de ser bueno para ellos, será mucho más rápido para ti.