2014-09-10 127 views
1

我有一份格式與XML格式非常接近的文檔,我從外部源獲得(我無法在源文件中修復它)。但是這個軟件在某一點上是一個行業標準,所以它在我們的許多用戶手中,並且替換這些系統可能會讓我們的用戶花費大筆資金。他們不會這樣做。有時候這個文檔是以完全格式化的XML格式出現的,但在某些情況下,文檔在某些元素的InnerText中有無效文本。一個這樣的例子是<=>。我在用戶輸入的文本字段中找到這些字段,並且在生成XML文檔時源應用程序沒有清理。將XML文檔轉換爲XML

我有一個.net應用程序正在閱讀此文檔與XmlReader對象。在大多數情況下它會成功,因爲在大多數情況下,文檔是有效的XML文檔。但是,如果我得到一個不是XML文檔的文檔,它會引發異常,原因很明顯。

有沒有人知道在加載之前將此文檔轉換爲XML的方式?或者有沒有辦法讓XmlReader更好地處理錯誤?阻止這個文檔成爲一個有效的XML文檔的數據對我來說並不重要,而且可能會被拋棄。任何對我很重要的東西都被格式化爲有效的XML。

+1

您可以預處理文檔,並在將文檔饋送到XMLReader之前查找特定的無效序列並進行清理。 – 2014-09-10 16:05:47

+0

問題是沒有特定的模式。這是用戶生成的數據,源系統只是在不清除它的情況下將其注入到XML中。 – Jesse 2014-09-10 16:37:26

+0

我更新了問題以反映這個文檔在技術上不是XML文檔。雖然我覺得這是一個挑剔的選票。 – Jesse 2014-09-10 20:56:32

回答

0

其他系統不給你XML。不要認爲它是無效的XML,或者幾乎是XML,或者是其中有錯誤的XML。把它想成YXQ。如果有人以YXQ格式發送數據,則需要先獲取(或寫入)YXQ的規範,然後您需要爲其編寫一個解析器,或許是一個將其轉換爲XML的解析器。也許YXQ與一些現有的解析器如TagSoup或validator.nu會處理的語言相似;你可以試試看,假設你有足夠大的YXQ樣本來使你的測試有意義。

或者,有很多人使用的稱爲XML的非常好的標準交換格式。解析器在每個可以想象的平臺上都已經存在,這具有很大的優勢。人們通過使用它爲自己節省了大量的金錢。爲什麼不建議你的數據供應商?他們可能會發現他們獲得了更多的客戶。

+2

我不能說這是否是一個嚴肅的答案 – Saggio 2014-09-10 21:01:27

+0

我更新了這個問題,以澄清這一事實,這不是我接收的技術上的XML。投票決定離開會很好。我想我應該思考我提出這個問題的方式,從來沒有任何時間點我認爲這個文件是XML,我只是認爲堆棧溢出社區中的聰明人可以自己推斷出這個事實,也許提出一些實際的建議來幫助我解決這個問題。我不希望自己或我的隊友中的一個人在發生罕見情況時需要手動修復此問題。 – Jesse 2014-09-10 21:02:22

+0

@Saggio - 我認爲這很嚴肅。我認真投了棄權票,我認爲我不配。 – Jesse 2014-09-10 21:03:51