2011-10-07 43 views
0

對於這篇較長的文章我很抱歉,但是這個問題並不容易說明。jdom與ssis之間的奇怪相互作用

我最近編寫了一段Java,爲一位同事重新配置一些SSIS包,使用jdom解析和操作XML。該程序運行,但結果文件崩潰。我們能夠追蹤到原始文件中奇怪的大多數非打印字符的崩潰情況,這些字符未在jdom寫入的文件中再現。

這個角色的奇怪之處在於,它並沒有出現在所有編輯器中。例如,Oxygen XML編輯器甚至沒有看到它。但是,在記事本中,原來的版權聲明出現這樣的:

<DTS:Property DTS:Name="TaskContact">Execute SQL Task; Microsoft Corporation; Microsoft 
SQL Server v9; © 2004 Microsoft Corporation; All Rights  
Reserved;http://www.microsoft.com/sql/support/default.asp;1</DTS:Property> 

和同一元素的轉換版本:

<DTS:Property DTS:Name="TaskContact">Execute SQL Task; Microsoft Corporation; Microsoft 
SQL Server v9; © 2004 Microsoft Corporation; All Rights 
Reserved;http://www.microsoft.com/sql/support/default.asp;1</DTS:Property> 

(問題字符是一個公正的版權符號之前)

在問題的軟件包上運行全局替換,其中Â - >「」和© - >「(c)」使問題消失,但現在事實證明,當未修改的元素被放置時進入修改後的軟件包,所以現在我不太確定r是什麼問題的一部分。

再次,我很抱歉這篇長文章,但我不想忽略任何細節。任何見解或建議將不勝感激;我很困難。

我的同事會向我發送他加載這些消息的錯誤消息,如果他們有用,我可以發佈這些消息。

+0

你在通過jdom在SSIS中重新配置什麼? – billinkc

+0

我正在爲數據倉庫重新編寫一堆dtsx包,幫助數據庫團隊清理。具體來說,規範化一些元素名稱並插入缺失的元素,其化妝可以通過編程來確定。 –

+0

啊,我打算建議看看[PacMan](http://pacman.codeplex.com/),但它聽起來像你已經熟悉了對象模型。 – billinkc

回答

0

至於問題的根源:寫在一個編碼和閱讀另一個。看到我對這個問題的回答。 £ becomes £ Why? XML ISO encoding issue? 只需將版本符號©(unicode U + 00A9)替換爲英鎊符號£即可。希望你能找到編碼混合正在發生的地方。

+0

謝謝你。我在搜索時發現了答案,雖然它沒有讓我分類,但它幫助我找到了更好的地方。同時,我創建了一個FileReader並調用它的getEncoding()方法,它說「Cp1252」。我將XMLFormatter的輸出編碼設置爲該字符,並且字符看起來正確,但JDOM無法讀取結果文件。由於我有兩個階段的過程,這是一個問題。我已經合併了這些階段,並且我希望報告它是否有效,並會發布結果。 –

+0

@JonKiparsky。使用FileReader可能是問題。閱讀器的編碼可能與內容的「真實」編碼不匹配,這種情況下的證據也支持這種編碼。我總是建議使用字節流而不是字符流。 –

+0

感謝您的提示。我會給它一個鏡頭。 –