報告以下異常客戶端的機器上已經發生:XElement.Save導致XmlUtf8RawTextWriter拋出異常
System.ArgumentException: '', hexadecimal value 0x1F, is an invalid character.
at System.Xml.XmlUtf8RawTextWriter.InvalidXmlChar(Int32 ch, Byte* pDst, Boolean entitize)
at System.Xml.XmlUtf8RawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlUtf8RawTextWriter.WriteString(String text)
at System.Xml.XmlUtf8RawTextWriterIndent.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at System.Xml.Linq.ElementWriter.WriteElement(XElement e)
at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
at System.Xml.Linq.XElement.Save(XmlWriter writer)
at System.Xml.Linq.XElement.Save(String fileName, SaveOptions options)
at System.Xml.Linq.XElement.Save(String fileName)
不幸的是,沒有提供更多的信息。
該錯誤有點令人費解。
0x1F
是一個問號。如果某個元素或屬性的名稱中包含問號(這是非法的),則會在創建XElement
或XAttribute
時使用無效名稱而不是保存到磁盤時引發異常。
XmlUtf8RawTextWriter
類拋出異常,這是XElement
內部使用我猜(應用程序沒有)。預計不能XElement
自己處理編碼問題等?什麼可能導致它崩潰?它是一些操作系統或框架不兼容?
我知道我的問題比較模糊,但我必須對有限的信息進行操作。
我會很感激,如果有人能夠至少指出我正確的方向。我以前沒有看到過這樣的錯誤。
謝謝你的提示。但是'XElement'不會自動轉義需要轉義的字符(比如&符號等),還是將它們包裝在CDATA塊中?如何手動清理'XElement'的內容? –
@Morawski:不 - 你不能直接用XML表示這些字符,甚至不能用CDATA來表示。爲了消毒,您需要編寫一個方法來檢查內容是否包含任何無效字符,如果是,則進行替換。 (一個正則表達式替換*可能最終會成爲最快的方法。)如果我是你的話,我會在它的XElement之前執行它。 –