0
我收到的時候我試圖將字符串轉換爲XML MS SQL Server中非常奇怪的錯誤結束非法字符:XML解析,在串
Msg 9420, Level 16, State 1, Line 5
XML parsing: line 1, character 8071, illegal xml character
如果我檢查字符串中的一些文字編輯,我可以看到,它的長度是8070.爲什麼抱怨字符8071,如果它不存在?
這是我如何將字符串轉換爲XML:
CAST(REPLACE(SUBSTRING(
REPLACE(REPLACE(REPLACE(ResponseData,'ä','a'),'ö','o'),'å','a'),
PATINDEX('%<?xml%',ResponseData), PATINDEX('%sonType>', ResponseData)+6),
'<?xml version="1.0" encoding="utf-16"?>',
'<?xml version="1.0" encoding="utf-8"?>')as XML) as ResponseData
是否有任何引起的問題取代了?
UPD:問題還在於,在ResponseData
列中的XML字符串與一些其它數據一起存儲。例如:
Error from service: <Some error description>. Sent request: <?xml version="1.0" encoding="utf-16"?><Contents of the XML>
所以我需要從該列中獲取該XML字符串,然後將其轉換爲XML。
你爲什麼用'編碼=「UTF-16」替換頭'和'編碼=「utf-8」'?這可能會導致這個問題 - 你可以在沒有做這個替換步驟的情況下嘗試嗎?另外:什麼是你的表格中'ResponseData'列的數據類型? –
@marc_s而沒有更換,我得到'無法切換encoding'錯誤。 「ResponseData」列的類型是'varchar(max)'。 – Azimuth
您需要使用'CONVERT'並在轉換列時執行**兩個步驟:'CAST(CAST(ResponseData as NVARCHAR(max))AS XML)' - 首先需要將'ResponseData'轉換爲* * ** NVARCHAR因爲你定義它是'UTF-16'(= Unicode)的編碼,其次,你需要使用'CAST'再次到該結果'XML'轉換。這樣,你**不需要**從你的內容中刪除該標題 –