2010-10-28 71 views
3

使用德爾福2009年和IXMLDOMDocument2德爾福,IXMLDOMDocument2,加載失敗,因爲無效字符

我收到加載XML到IXMLDOMDocument2時「無效的字符文本內容中找到」錯誤。該字符是1B(十六進制),並存在於CDATA部分。微軟的XML查看器(IE)加載文件就好了。該XML看起來像......

<data><child><![CDATA[-- ]]></child></data>

注:我嘗試粘貼的XML,但特殊字符將被刪除。在CDATA部分,在我的XML文件中有「 - 」後面的1B字符。

我已經嘗試添加到XML和其他編碼的開始,沒有任何工作適合我。有什麼可以做到加載這個文件?

感謝, 邁克爾

回答

5

字符U + 001B並沒有在XML允許,則ASCII控制字符的along with most of the rest。它的格式不正確,如果微軟的XML查看器沒有發出抱怨,它不會根據XML的規則解析它。嘖!

在XML 1.1中只有,除U + 0000以外的所有內容都可以包含在文檔中作爲字符引用,如&#x1B;。 (很顯然,這在CDATA部分中沒有用處,但是CDATA部分並非真正用得上)

如果您需要在XML中包含任意控制字​​符,則通常需要使用特定於應用程序的編碼方案如base64。

+0

感謝您的信息和鏈接。這個XML由Oracle提供的軟件包中的一個不幸地由Oracle創建。我們只是試圖加載它,並且沒有任何控制權來修改XML以使其符合規範。 – 2010-11-01 19:56:18

+0

呃,多麼不愉快。那麼,在將它提供給XML解析器之前,您當然可以將'\ x1B'替換掉。但是,無論甲骨文的任何組件如何做,都需要一個針對它的bug。 – bobince 2010-11-01 20:11:04

0

從我需要從某個應用程序調用的某些Web服務中,我收到了很多污染XML的字符&#x0;。爲了解決這個問題,我只是首先將XML加載到WideString變量中,然後在將XML添加到IXMLDocument接口對象之前,使用StringReplace()替換非法文本。
我知道這很髒。但是如果你仍然需要處理一些包含非法字符的XML文件,這只是最簡單的選擇。