C# 未定义实体&;nbsp XML解析异常

C# 未定义实体&;nbsp XML解析异常,c#,xml,C#,Xml,我试图在声明中定义非中断空格实体。代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp "&#x00A0;"> ] /> <html xmlns="http://www.w3.org/1999/xhtml"> ..

我试图在
声明中定义
非中断空格实体。代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp "&#x00A0;"> ] />

 <html xmlns="http://www.w3.org/1999/xhtml">
  .. .... 

我做错了什么?

您可以尝试使用此实体
 取而代之。

首先,《代码》中外部实体和内部实体的组合http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ ]因为
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
包括
www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
,其中包括与您的完全相同的

因此,该位应为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

其次,默认情况下,XDocument不会验证为DTD。但是,您可以使用适当的设置从
XmlValidatingReader
XmlTextReader
加载

如果可能的话,[如果不可能,那就让它成为可能吧!]设置XmlReader使用
XMLPreloadeResolver
,这是一个好主意,因为有很多人在DTD和它包含的.ent文件的URI上点击了糟糕的ol'W3C,他们完全同意您使用它的本地副本(通过“完全同意”我的意思是,如果每个人都不再对他们的服务器进行如此猛烈的攻击,他们会非常高兴)。这不仅对他们有好处,对你来说也会快得多

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">