XML字符串到xml无法切换编码

时间:2015-05-21 11:44:48

标签: sql-server xml sql-server-2005 encoding

我有一个格式错误的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吗?

1 个答案:

答案 0 :(得分:2)

字段xstr nvarchar(max)与编码windows-1257不兼容。如果使用varchar(max),则在将字符串转换为XML时不会失败。 Varchar类型&amp; Xml编码是相关的。如果您的XML编码是无编码的(例如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)