Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

ucel.net

XCData a zgodność ze standardami

Natknąłem się dziś na dość irytującą cechę klasy XCData, reprezentującej element CDATA w dokumencie XML. Otóż jeśli w poniższym kodzie

string xml = "<node><![CDATA[line1\r\nline2]]></node>";
XDocument doc = XDocument.Parse(xml);
XCData data = doc.Element("node").FirstNode as XCData;
string value = data.Value;

przeanalizujemy wartość zmiennej value, to okaże się, że nie zawiera ona, jak możnaby oczekiwać, łańcucha znaków line1\r\nline2 a line1\nline2. Okazuje się, że takie zachowanie jest jak najbardziej zgodne ze standardem XML, co można znaleźć tutaj.

Są dwie możliwości obejścia tego problemu. Można wymusić, by znaki \r nie zostały usuwane z całego dokumentu poprzez użycie XmlTextReadera:

string xml = "<node><![CDATA[line1\r\nline2]]></node>";
XDocument doc = XDocument.Parse(new XmlTextReader(new StringReader(xml)));

bądź skorzystanie z informacji zawartej w specyfikacji. Specyfikacja gwarantuje, że w zmiennej value nie znajdzie się znak \r, można więc zamienić wszystkie wystąpienia \n na \r\n.

Co ciekawe problem ten nie występuje w standardowych klasach do obsługi dokumentów XML (XmlDocument / XmlCDataSection).

Opublikowane 20 czerwca 2008 17:47 przez ucel
Filed under: ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

Brak komentarzy

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij
W oparciu o Community Server (Personal Edition), Telligent Systems