2011-05-09 40 views
1

我有一个存储过程返回一个完全形成的模式实例为XML数据类型:使用XML“原样”使用BizTalk SQL适配器

<ns0:PolicyCreated xmlns:ns0="http://blah/v1.0"> 
    <ns0:Source> 
    <ns0:Organisation>Company1</ns0:Organisation> 
    <ns0:System>System1</ns0:System> 
    </ns0:Source> 
</ns0:PolicyCreated> 

的问题是,当我尝试与SQL适配器消耗这它将xml包装在根节点和命名空间中:

<ns0:PolicyCreated xmlns:ns0="http://blah/v1.0"> 
    <ns0:PolicyCreated xmlns:ns0="http://blah/v1.0"> 
    <ns0:Source> 
     <ns0:Organisation>Company1</ns0:Organisation> 
     <ns0:System>System1</ns0:System> 
    </ns0:Source> 
    </ns0:PolicyCreated> 
</ns0:PolicyCreated> 

所以我得到一个双根节点和命名空间。

任何想法如何解决这个问题?

感谢adavnce

汤姆

+1

您可以共享请求和响应模式吗?这是BizTalk 2006 SQL适配器还是WCF SQL适配器? – 2011-05-09 13:14:04

+0

嗨克里斯没有请求/响应模式。我没有使用适配器元数据。这是一种单向接收。我只想从SQL适配器接收xml,这与您使用MSMQ或FILE适配器的方式类似。看起来有一种方法可以使用WCF SQL适配器执行此操作,因为您可以在发送端口响应中指定正文xpath。但是,使用SQL – 2011-05-10 06:30:42

+1

您是否试图为XML返回的SQL适配器创建信封模式?为子文档使用'anyType/maxOccurs = unbounded'。尽管你可能不是真的在进行信封处理,但双根元素已经消失了,因为它被认为是一个信封元素,而不是文档元素。您应该最终将您的单行进入MessageBox'原样'(FOR XML AUTO) – 2011-05-25 17:01:30

回答

1

更新:似乎有一种方法使用WCF SQL适配器要做到这一点,因为你可以指定在发送端口WCF configutation响应消息体的XPath。

但是,这只是浪费,因为你所做的只是告诉适配器“解开”xml,然后应用另一个相同的包装。

使用SQL适配器不存在这样的选项。所以没有办法做我想做的事情,但这不是世界末日。我只需要在SQL适配器配置中指定一个不同的包装器,并拥有另一个架构来维护。