2011-08-03 55 views
2

許多C#XML序列化的例子在這裏包括像爲什麼許多XML序列化示例去掉特定字符?

xml = xml.Substring(xml.IndexOf(Convert.ToChar(60))); 
xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1)); 

代碼,我明白這是丟棄圍繞<和>任何(不可打印/無效)字符,但爲什麼在首位存在這些字符?

假設使用帶有XmlTextWriter的Encoding.Unicode的UTF16。

+1

這實際上在第一個'<'和最後一個'>'之後放棄所有字符(不僅僅是「不可打印/無效」)。你在哪裏見過一個這樣的例子? –

+0

我不確定原始編碼器在哪裏找到它,但通過搜索[xmlserializer convert.tochar(62)](http://www.google.com.au/search?q=xmlserializer+convert。 tochar \(62 \)) –

回答

2

使用假設UTF16 Encoding.Unicode和XmlTextWriter。

UTF格式在XmlTextWriter的構造中並不是真正的玩家。如果XmlTextWriter傳遞了一個包含您的xml變量的StringReader,那麼問題可能存在於xml最初從磁盤讀取的方式中。

文本文件通常包含稱爲BOM(Byte Order Mark)的編碼前導碼。如果讀取不正確,會在文件內容之前出現幾個「奇怪」字符。

我希望你的代碼是一個窮人試圖從錯誤讀取的文本文件中刪除BOM。

+0

合理,但爲什麼在上次'>'後丟棄所有數據? –

+0

這只是一個傳遞給XmlSerializer的對象 - 它並沒有在任何時間點擊磁盤 –

+0

http://stackoverflow.com/questions/660440/c-xml-serialization-leading-question-marks似乎支持您的答案。我將XML發送給SQL Server,以便在那裏檢查我們的編碼。 –

1

就我所知,它就是Postel定律的一個例子,也就是魯棒原則。這裏不應該有任何東西,但爲防萬一,我們也不妨將它拿走。

保守你發送的內容;在你接受什麼樣的

http://en.wikipedia.org/wiki/Robustness_Principle

您可能還需要檢查XML規範,因爲忽略了附加文本,實際上可能需要自由的,而不只是一個禮貌的便利

相關問題