我有一个格式错误的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 :(得分: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)