2012-01-28 32 views
1

我有這個問題..我從客戶端接收數據..使用套接字連接。但這並不重要。所有數據都使用XDocument對象存儲在XML文件中。 有時,當調用XDocument.Save(filestream)並將特定字符或符號傳遞給它時,我得到一個Exception(無效的十六進制字符),這意味着該XML文件不能有一些特殊字符? 如果是的話,我在哪裏可以找到可能產生這種異常的特殊字符列表?在調用Xdocument.save之前應該跳過的字符。

+0

是'XML'不只是一個文本文件,你可以不寫任何你想要的,只要你想要的,但經常有solution.Please提供你寫的代碼示例,並得到例外。 – Tigran 2012-01-28 21:32:29

+0

您可能需要爲文檔的某些部分使用CDATA。 http://msdn.microsoft.com/en-us/library/system.xml.linq.xcdata%28v=vs.100%29.aspx – oleksii 2012-01-28 21:34:54

+0

只需瞭解更多的細節,您現在就可以得到明確的答案。始終發佈完整的錯誤消息和相關代碼。但Darin有一個很好的猜測。 – 2012-01-28 21:43:03

回答

4

字符在範圍[0x0-0x1F]被稱爲控制字符和不包括0x9,是0xA,爲0xD它們不能在XML使用。

下面是來自XML specification報價:

[定義:A解析實體包含文本,字符的 可以表示標記或字符數據的序列,] [定義: 字符是一個原子由ISO/IEC 10646:2000 [ISO/IEC 10646]規定的文本單位。合法的字符包括製表符,回車,換行, 和Unicode和ISO/IEC 10646的 這些標準A.1標準參考資料引用的版本的法律性質是當前在 時間編制本文件。這些 標準可能會通過修訂或新版本添加新字符。因此,XML處理器 必須接受爲Char指定的範圍內的任何字符。 ]

字符範圍

char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]/*任何Unicode字符, (不包括代理塊,FFFE和FFFF)。 */

+0

我認爲這取決於它寫在哪裏...... – Tigran 2012-01-28 21:33:26

+2

@Tigran,不,它不依賴於它。 – 2012-01-28 21:35:15

1

@Darin給出的答案應該讓你指出正確的方向。我會補充一點,如果你有一個用於xml開發的工具,如XMLSpyStylus Studio,你可以快速確定違規字符。如果你沒有這樣的工具,你可以使用在線XML驗證從WC3學校在這裏找到:

http://www.w3schools.com/xml/xml_validator.asp

這將檢查XML結構完好形成,如果它包含無效字符也不會形成良好。

更不可能的情況可能是由XML文檔指定的編碼並允許字符造成問題的原因。如果文檔被指定爲UTF-8,那很可能是這個問題。

相關問題