2012-08-22 144 views
0

我试图更新XML类型的列。要插入将特殊字符XML插入到SQL

文本中的XML字段: “&决策协议!”

文字转换成XML:<?xml version="1.0" encoding="utf-16"?><Informations xmlns="http://monschema"><Text lGic="fdf475bc-9fed-4f61-b321-f81949cb51ca" id="71e231e6-ecbd-4848-ba6f-004bdddefb79">&amp; Décision &#x12; &#x13; Accord</Text></Informations>

错误:消息9420,级别16,状态1,行7 XML解析:第1行,不符合字符263的字符XML

我不明白为什么ASCII码为“&#x12”的字符有问题。

如果我将&#x12替换为&#x20,它可以工作!

你能帮我吗?

预先感谢您

+0

此链接可以帮助你http://social.msdn.microsoft.com/Forums/en-US/biztalkediandas2/thread/7bb66f58-df7d-4a8a- a53e-80a4b3d6b38c – RedEyedMonster

回答

0

我解决了我的问题。

此字符来自ORACLE数据库上的SQL obtenues视图。 ORACLE上的字符 - 由SQL SERVER上的interpreted解释。

我会尽我认为一个替代

0

这些控制字符是not supported in XML version 1.0 documents

您应该能够在文档的version属性中将您的版本更改为1.1,在这种情况下文档应该进行验证。

+0

谢谢你的回复,我不知道。 但是当我用1.1替换版本1.0时,SQL SERVER返回错误:XML声明语法不正确 – Kevin

+0

Jukka的评论似乎是正确的,因为这些似乎不是您想要的字符。 –

1

字符引用&#x12;&#x13;表示在XML 1.0中不允许的控制字符。这里真正的问题是它们不表示文本中的字符。字符“↨!”是U + 21A8上下箭头,带有BASE和U + 203C双精度标记,因此应写为&#x21a8;&#x203c;

获得奇数字符引用的原因可能是在CP437编码中,“↨!”放置在代码位置12和13(十六进制)中。所以这是一个编码混淆,并且一些转换应用了错误的转换。在XML中,字符引用中的数字总是指Unicode码数字。

+0

谢谢你的回答。 我转换器具很多XML 我使用SQL“FOR XML PATH”文本 所以我不能测试,如果每个字符低于ASCII码20.治疗就会过长 把我的XML 1.1版一个好方法,但拒绝SQL SERVER。 – Kevin

+0

即使可能,使用XML 1.1也不能解决问题。它仍然不会使引用表示正确的字符。我认为你需要找出编码不正确的操作发生在哪里。 –