所以我有XML,我不能更改,它基本上是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<ns6:Responses xmlns:ns6="http://www.yadayada" xmlns:ns2="http://www.yadayada" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns4="http://www.yadayada" xmlns:ns5="http://www.yadayada">
<MessageReference>824cf96b-6130-460c-a2d4-2adc3b6ea14d</MessageReference>
</ns6:Responses>
我使用手工制作的具有SQL注释的XSD,相关部分如下:
<xs:element name="Responses" msdata:Prefix="ns6" sql:relation="Responses">
<xs:complexType>
<xs:sequence>
<xs:element name="MessageReference" type="xs:string" msdata:Prefix="ns6" sql:field="MessageReference" />
</xs:sequence>
</xs:complexType>
</xs:element>
当我通过sqlxmlblkload实用程序推送它时,它不会引发错误,但在我的数据库中什么也不会结束。
如果我执行以下操作之一,我可以使其工作:
-
移除
ns6:
命名空间从
<ns6:Responses
在XML中并删除
msdata:Prefix="ns6"
从XSD;
-
添加
ns6
到
MessageReference
在XML中,即
<ns6:MessageReference>
.
我的猜测是,处理过程期望
ns6:Responses
也可加前缀
NS6
,但它们不在我的XML中,我无法更改。
我尝试过以下方法,但不起作用:
-
补充
msdata:Prefix=""
到
消息引用
xsd中的元素;
-
移除
msdata:prefix=“ns6”
完全来自XSD;
-
以多种方式晃动名称空间。
问题是我可以更改XSD,但不能更改XML。所以我的两个工作解决方案对我来说都不好,因为它们都涉及到对XML的更改。
我知道我可以预先处理XML,或者删除
NS6:
名称空间或将其添加到所有元素,但我想尝试避免这种情况。