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

XML string to xml unable to switch 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 服务器中的 xml?

字段 xstr nvarchar(max) 与编码 windows-1257 不兼容。如果您使用 varchar(max),它不会在将字符串转换为 XML 时失败。 Varchar 类型和 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)