2012-09-04 8 views
5

Próbuję zdefiniować non breaking space entity w deklaracji <!doctype />. Kod:Niezdefiniowana encja & nbsp wyjątek analizowania 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"> 
    .. .... 

Ale jeszcze kiedy tworzę obiekt XDocument z powyższego dokumentu, otrzymuję wyjątek

Undefined entity &nbsp. 

Co robię źle?

Odpowiedz

3

Po pierwsze, połączenie podmiotów zewnętrznych i wewnętrznych, w "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp "&#x00A0;"> ] jest zbędne, ponieważ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd obejmuje www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent który obejmuje <!ENTITY nbsp "&#160;"> który jest dokładnie takie same.

Więc nieco powinno być po prostu:

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

drugie, XDocument nie sprawdza się DTD domyślnie. Można jednak Load z XmlValidatingReader lub XmlTextReader z odpowiednimi ustawieniami

jeśli to możliwe, [Jeśli nie jest to możliwe, to możliwe!], Że to dobry pomysł, aby ustawić XmlReader do używania XmlPreloadedResolver, ponieważ istnieje wiele osób uderza w biednego W3C na URI tego DTD i plików .ent, które zawiera, i są całkowicie w porządku z tobą używając lokalnej kopii (przez "totalnie w porządku" mam na myśli, że byliby naprawdę zadowoleni gdyby wszyscy przestali tak mocno uderzać swoim serwerem). Poza tym, że są dla nich dobre, dla ciebie będzie to znacznie szybsze.

9

Zamiast tego możesz spróbować z tym obiektem: &#160;.

Powiązane problemy