【发布时间】:2019-02-28 19:51:11
【问题描述】:
我正在使用 Biztalk 将 XML 文件中的数据插入 SQL 服务器。为此,我创建了一个存储过程,它根据 XML 文件中的数据将新记录插入到表中。
我在将文件放到接收位置时遇到了编码问题。
在消息日志中它会抛出以下警告:
XML解析:第1行,第38个字符,无法切换编码
并且数据没有被插入到我的表中。
XML 文件以 UTF-8-BOM 编码。
我尝试将其转换为 UTF-16、UTF-8,但它给出了相同的警告。
在我的 SQL 存储过程中,我声明了“iXml”变量并将其转换为 NVARCHAR(MAX):
@iXml XML
AS
BEGIN
SET @iXml = CAST(CAST (@iXml AS NVARCHAR(MAX)) AS XML)
如何正确编码我的 XML 文件? SQL 对 XML 的期望是什么编码?
编辑:XML sn-p
<ns0:Vejstykke xmlns:ns0="http://Company.Vejregister.Schemas.Vejstykke_XML">
<Data>
<sekvensnummer>483523</sekvensnummer>
<tidspunkt>2018-01-14T02:08:38.432Z</tidspunkt>
<operation>insert</operation>
<id/>
<kommunekode>0326</kommunekode>
<vejkode>2901</vejkode>
<oprettet/>
<ændret/>
<navn>Hedvigsvej</navn>
<vejnavn>Hedvigsvej</vejnavn>
<navngivenvej_id/>
</Data>
【问题讨论】:
-
你能附上失败的 XML 吗?您应该能够在 without BOM 的情况下重新打开/重新保存文件(notepad++ 可以做到这一点,我肯定知道 SublimeText 也可以)。删除 BOM 后,您应该能够很好地解析它
-
你好,Xedni。我尝试删除 BOM 并使用编码 UTF-8 发送文件,但它给出了相同的错误。
-
那你能把失败的xml(或代表sn-p)包括进来吗?
-
select cast(cast(@iXML as nvarchar(max)) as xml)在您提供的 xml 上似乎对我来说运行得很好。 -
这很奇怪。您需要更多信息吗? Xml 文件没有编码声明。我的表使用 NVARCHAR 数据类型来存储 xml 数据。
标签: sql-server xml casting encode