2015-05-21 115 views
1

我有一個格式不正確的XML字符串。將XML字符串轉換爲xml無法切換編碼

DECLARE @xmlt TABLE(xstr nvarchar(max), xml xml) 

INSERT INTO @xmlt(xstr) VALUES (
' <?xml version="1.0" encoding="windows-1257" ?> 
- <objects><object id="778913">a</object> 
- <object id="785491">b</object> 
- <object ...goes on... 
- </objects> 
' 

爲了能夠使用XML我將它轉換爲XML

UPDATE @xmlt SET xml = CAST(REPLACE(LTRIM(xstr), ' - <', '<') AS xml); 

但我得到一個錯誤 XML parsing: line 1, character 46, unable to switch the encoding.

是否有任何其他方式(不帶""替換字符串encoding="windows-1257" )將該XML字符串轉換爲SQL Server中的xml?

+0

備註:您樣品中的XML並沒有在所有節點根節點,它不是有效 –

+0

好評論,:)謝謝! XML實際上有它。更新了示例。 – Willmore

回答

2

字段xstr nvarchar(max)與編碼windows-1257不兼容。如果使用varchar(max),它將不會在將字符串轉換爲XML時失敗。 Varchar類型& Xml編碼是相關的。如果您的XML編碼是unicoded(例如UFT-16),那麼使用nvarchar將會起作用。

這將與您的XML字符串工作:

DECLARE @xmlt TABLE(xstr varchar(max), xml xml) 

insert into @xmlt(xstr) values('<?xml version="1.0" encoding="windows-1257"?> 
- <objects> 
- <object id="778913">a</object> 
- <object id="785491">b</object> 
- </objects>') 

update @xmlt set xml = cast (REPLACE(ltrim(xstr),' - <','<') as xml) 
+0

謝謝你的工作:改爲varchar! :) – Willmore

+0

你能幫我這個:http://stackoverflow.com/questions/32230486/how-to-update-a-sql-table-column-with-xml-data – Si8