2012-09-04 27 views
5

我試圖在<!doctype />聲明中定義non breaking space entity。代碼:未定義的實體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"> 
    .. .... 

但仍當我從上面的文檔創建XDocument對象,我得到一個異常

Undefined entity &nbsp. 

什麼,我做錯了什麼?

回答

3

首先,外部和內部實體在"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp "&#x00A0;"> ]組合是不必要的,因爲http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd包括www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent其包括<!ENTITY nbsp "&#160;">這是完全一樣的你的。

所以這一點應該僅僅是:

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

其次,的XDocument不驗證在默認情況下一個DTD。但是,你可以從一個XmlValidatingReaderXmlTextReader以及相應的設置

如果可能的話, [如果這是不可能的,使人們有可能!]這是設置爲使用XmlPreloadedResolver XMLReader可以是一個好主意,因爲有一個Load很多人在該DTD的URI和它所包含的.ent文件中打擊窮人'W3C,並且他們完全可以使用本地副本(通過「完全可以」),我的意思是他們會很高興如果每個人都會不停地敲打他們的服務器)。除了對他們有好處之外,它對你來說會更快。

9

您可以嘗試使用此實體&#160;代替。