2011-12-02 68 views
1

因此,我以XML字符串的形式從第三方獲取數據。XDocument解析字符串 - 空終止符問題

我想請執行下列操作

messageString = Encoding.ASCII.GetString(messageBeingSent); 
messageString = messageString.Trim(); 

XDocument xmlDoc = XDocument.Parse(messageString); 

然而,出現了錯誤,並給了我異常 十六進制值0x00爲無效字符。第1行,位置x,其中X是字符串中的最後一個字符。

在我看來,這是一個空終止符與字符串一起發送,然後XDocument由於空終止符而翻轉出來。

這是什麼解決方案?

+0

你應該考慮搞清楚什麼是actully發送並妥善處理它。即它可能是C風格(空終止)utf-8字符串,您嘗試處理爲長度爲ASCII字符串... –

回答

2

空字符是不是在XML有效。

你可以通過你要修剪字符:

messageString.Trim(' ', '\0', ....); 
+0

無論位置如何,XML在XML中都是無效的 - http://www.w3.org/TR/REC-xml/#charsets –

+0

是的,它僅僅是無效的,也是ASCII> 128和其他許多控制字符。 – Aliostad

+0

謝謝!這就是答案 –

-1

我不得不說,這似乎解決的方法就是

messageString = messageString.replace("0x00", ""); 

,或者如果你確定它是空值:

string s = myEncoding.GetString(bytes.TakeWhile(b => !b.Equals(0)).ToArray()); 
+0

0x00表示一個空終止符,實際上在字符串中看不到。 你理論上可以將文本從Text Visualizer中複製並粘貼到記事本中,並將其保存爲XML,並且這將是有效的。 –

+1

如果您確信它不在文本中並且它是結果集上多餘的空值,則可以在替換中使用「\ 0」,或者將字符串複製到字節數組並將字節複製回字符串,但是跳過值爲0的字節(儘管替換爲「\ 0」的功能與此相同) – Dracorat

+0

將此案例的一段代碼添加到答案中。 – Dracorat