使用xmlagg查询(选择xmlagg(xmlelement(...)从数据库中选择XML可以更好地控制我们拾取的数据格式。
根据查询生成模式,为我们提供了带有单个记录(包含xml)的标准polingstatments。为该xml创建模式也很简单(遵循example上的建议)
但是,将此架构添加到元素的数据结构类型不起作用。我可以在下拉列表中选择架构,但在选中时它会重置回上一个选定的条目,但任何其他条目都有效。 (在下图中,order_header是我想要使用的那个。)
我试图忽略架构,看看我是否只能映射结果,但是pollingstatement中的数据实际上已经转义
<POLLINGSTMTRECORD><XML><order_header><order_id>206817</order_id>
有没有人将oracle dataadapter与xml查询结合起来?我出错的任何线索?存储过程会更好地解决这个问题吗?我能找到一种方法,数据不会改变&lt;到<
答案 0 :(得分:1)
你有几个选择:
如果您使用TypedPolling,则必须以两种方式之一提取消息(将在xs:string元素中嵌入CDATA):
如果你使用XmlPolling,你可以做一个巧妙的小技巧:
<Any>
节点)现在,XML Recieve管道将&#34; debatch&#34;您对所生成的架构的查询。这种调度是必要的,因为理论上,查询可以在单个结果中产生多个文档(这将具有多个根节点,这将是无效的)。或者,您可以设计查询以生成除根节点之外的所有内容,然后只使用适配器设置来分配根节点,但我自己也不喜欢这种方法(我更喜欢能够快速轻松地无需修改即可测试查询结果。)
答案 1 :(得分:1)
解决方案相当简单,但有点难以找到文档。
我通过使用适配器服务并将XML查询放在绑定中来创建了receiveport。这创建了一个Schema,直到包含XML的节点(在我的例子中,这被称为XML)。
如果您只是运行它,它将创建一个XML,您在其中创建XML是XML元素中的String(所有&lt;&gt;转义为&lt;&gt;)。
要从polling语句中获取元素,首先需要创建一个结果将如何显示的模式(这可以通过从格式良好的XML生成模式来轻松完成)
然后更改receiveport“Inbound BizTalk Message body”,使源为“Path”,并从Visual Studio复制实例xpath以获取XML元素(包含XML数据的元素上的属性)
将xpath从元素属性复制到receiveport设置。你可以写Xpath但我不能推荐它。 (它在命名空间上有点特殊)
此时出现的消息是一个遵循结果XML模式的XML,可以用作BizTalk中的任何XML(实际上比使用Oracle适配器时获得的标准更简单,因为您摆脱了pollingstmt / pollingrecord / pollingrecord结构)
我想提一下你的根节点需要是唯一的,xpath得到的xml需要为它找到一个Schema。