我有一些XML從遠程(Java)Web服務傳入我的C#控制檯應用程序,它通過存儲過程寫入Microsoft SQL Server XML列。有時候XML在某個地方有一個不好的字符,而SQL Server沒有提供足夠的信息來確定問題的確切位置。評估XML查找壞字符?
我想在數據庫寫入發生之前評估XML,當然我沒有XSD。
在寫入數據庫之前,評估XML的每個部分的「常規一致性」的好方法是什麼?我正在使用.NET 4.0,C#。
謝謝。
我有一些XML從遠程(Java)Web服務傳入我的C#控制檯應用程序,它通過存儲過程寫入Microsoft SQL Server XML列。有時候XML在某個地方有一個不好的字符,而SQL Server沒有提供足夠的信息來確定問題的確切位置。評估XML查找壞字符?
我想在數據庫寫入發生之前評估XML,當然我沒有XSD。
在寫入數據庫之前,評估XML的每個部分的「常規一致性」的好方法是什麼?我正在使用.NET 4.0,C#。
謝謝。
您可以嘗試消毒的XML這可能有助於一點點:http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/
這種聯繫確實不僅有助於過濾無效字符,大部分的時間,這將是不夠的,也有用的(但我還是建議篩選未知字符爲安全)。
我想檢查標籤是否有效,您可以使用try catch。如果try catch在第1行返回問題,那麼問題可能是您的xml中沒有根元素?或者它可能是你的編碼對xml文檔不正確。他們應該返回不同的錯誤。
-1:消毒垃圾仍然產生垃圾。你不知道文檔的作者認爲壞字符代表了什麼。 – 2012-01-03 22:29:02
你不需要一定要刪除已消毒的字符,你可以將它們翻譯成被處理爲註釋的標籤,也可以在找到它們的確切行上找到它們時拋出異常。僅僅因爲該示例顯示了一種過濾方式並不意味着您必須刪除或者進行santize。你可以對這些角色做任何你想做的事情 – Dessus 2012-01-03 22:31:59
除了理解爲什麼他們在場之外的任何事情。 – 2012-01-03 22:41:40
如果您有可能,我建議您在第三方服務中檢索的所有XML數據上進行XML模式驗證。
Xml模式驗證將確保XML文檔的每個元素對其定義的合約有效。
您應該考慮讓Xml架構驗證可選,因爲它會引入開銷,您可能希望在生產環境中阻止這種開銷。但是在開發和測試環境中,獲取來自所有第三方服務的詳細驗證錯誤信息可能非常有用。
你會得到什麼錯誤?你在使用參數嗎? – SLaks 2012-01-03 21:13:07
只需將其加載到一個xml文檔或somesuch。捕獲異常,查找數據等等。當然,假設你從Web服務中獲得它,它會被破壞,而不是在你將它解釋爲sp時被搞亂編碼。 – 2012-01-03 22:03:16
只需用'XmlReader.Create()'打開文檔,然後用'XmlReader.Read()'循環每個節點。 – 2012-01-03 22:30:09