2013-07-26 68 views
0

我發送了一些XML錯誤的數據,並想知道在vb.net中是否有任何方式通過XML數據來處理字符串,並安全地清理垃圾數據不斷收到文件,其中包括',<,>,&內的屬性值,並想知道我是如何最好地通過和整理形成嚴重的XML ..在VB.net中修復和處理格式不正確的XML

目前我只是有一個函數,我不斷添加字符串替換,但壞數據可以是隨機的,可能有一段時間我才意識到存在問題。

我想知道是否有一種方法可以在reg-ex中解決這個問題,或者是否有.NET中的函數將安全地將壞XML轉換爲安全的XML?

我知道最簡單的解決方案是改變源,但這是不可能的,因爲它來自封閉源遺留系統。

感謝馬特

回答

2

當應用程序錯誤地生成XML時,可能最常見的錯誤是無法轉義特殊字符,如「<」,「&」和「」「,在某些情況下,此錯誤會產生無法識別的內容並修復,因爲它輸出格式良好的XML(但不是XML)

在屬性中未能轉義「」「可能特別難以修復,因爲未轉義的」「」看起來像是屬性值和XML語法錯誤的結果在文件中可能稍晚。

無法轉義「&」或「<」在大多數情況下更容易一些,因爲您可以檢測這些字符何時不會遵循格式良好的XML中可以合法遵循的內容 - 「&」的名稱和分號,名稱或者在「<」的情況下爲「/名稱」或「!」。如果這是你所期望的,你只會抓住90%的錯誤,但這可能比沒有好。

更好的是回到發送給你這些垃圾並將其修復的人。他們不會通過發送這種垃圾來爲任何人提供服務。

+0

我希望我可以回去把它整理一下,這讓我更加頭痛,然後我會記住 –

0

你需要寫它通過遍歷每個字符替換所有這些非XML支持的字符和一個函數來清潔您的輸入,如果字符不通過各自的<和>字符之間下降xml實體。

有關完整列表,您可以在wiki

看到一旦你替換這些字符,你可以使用任何XML解析器解析有效的XML到達。

+0

對不起,我知道我需要替換非xml支持的字符,然而在一個字符串中,我怎樣才能safley刪除''<>'屬性內部的東西,而不會混淆有效的出現''<>'如屬性和元素 –

+0

對不起 - 我只是錯過了一個細節。更新了帖子。 – Prash