【问题标题】:Can you use the oracle dataadapter to select an XML from a database您可以使用 oracle 数据适配器从数据库中选择 XML
【发布时间】:2015-04-13 08:30:13
【问题描述】:

使用 xmlagg 查询(select xmlagg( xmlelement (... ) 从数据库中选择 XML 将允许对我们拾取的数据格式进行更多控制。

根据查询生成模式为我们提供了带有单个记录(包含 xml)的标准 polingstatments。为该 xml 创建架构也很容易(遵循example 上的建议)

但是,将此架构添加到元素的数据结构类型不起作用。我可以在下拉列表中选择架构,但在选择时它会重置回之前选择的条目,但任何其他条目都有效。 (在下图中,order_header 是我想要使用的。)

我尝试忽略模式并查看是否可以仅映射结果,但轮询语句中的数据实际上被转义了

<POLLINGSTMTRECORD><XML><order_header><order_id>206817</order_id>

有没有人将 oracle 数据适配器与 xml 查询结合使用?任何线索我哪里出错了?存储过程会是更好的解决方案吗?我能找到一种方法数据不会将 <

【问题讨论】:

    标签: xml oracle biztalk


    【解决方案1】:

    解决方案相当简单,但很难找到相关文档。

    我通过使用适配器服务并将 XML 查询放入绑定中创建了接收端口。这创建了一个直到包含 XML 的节点的模式(在我的例子中,这被称为 XML)。

    如果你只是运行它,它会创建一个 XML,你创建的 XML 是 XML 元素中的一个字符串(所有 转义为 )。

    要从轮询语句中取出元素,您首先需要创建结果的模式(这可以通过从格式良好的 XML 生成模式轻松完成)

    然后更改接收端口“入站 BizTalk 消息正文”,使源为“路径”,并从 Visual Studio 复制 XML 元素的实例 xpath(保存 XML 数据的元素上的属性)

    将元素属性中的 xpath 复制到接收端口设置。您可以编写 Xpath,但我不建议这样做。 (命名空间有点奇怪)

    此时传入的消息是一个 XML,它遵循您的结果 XML 架构,并且可以用作 BizTalk 中的任何 XML(实际上比使用 Oracle 适配器时获得的标准更容易一些,因为您摆脱了 pollingstmt/pollingrecord/pollingrecord 结构)

    我想提一下,您的根节点需要是唯一的,并且 xpath 获取的 xml 需要为它找到一个 Schema。

    【讨论】:

    • 如果没有更好的选择,我会在几天后接受这个作为答案。
    【解决方案2】:

    你有几个选择:

    类型化轮询

    如果您使用 TypedPolling,则必须通过以下两种方式之一提取消息(将作为 CDATA 嵌入到 xs:string 元素中):

    XmlPolling

    如果你使用 XmlPolling,你可以做一个巧妙的小技巧:

    1. 创建一个“虚拟”信封架构(带有 xs:any 子节点的单个记录,信封 = true,BodyXPath = <Any> 节点)
    2. 将 xmlStoredProcedureRootNodeName 设置为信封架构的根节点
    3. 将 xmlStoredProcedureRootNodeNamespace 设置为信封架构的命名空间
    4. 根据您的 Oracle 查询生成的 XML 创建一个模式

    现在 XML Recieve 管道会将您的查询“分批”到您生成的架构中。这种分批是必要的,因为理论上一个查询可以在一个结果中生成多个文档(这将具有多个根节点,这将是无效的)。或者,您可以设计查询以生成除根节点之外的所有内容,然后仅使用适配器设置来分配根节点,但我自己不太喜欢这种方法(我更喜欢能够快速轻松地测试结果没有修改的查询)。

    【讨论】:

    • 感谢您的回答,但 Oracle 适配器无法使用 Typedpolling 和 XMLPolling。我已经寻找解决方法,但仍在努力解决它。
    • 抱歉,我已经习惯了使用 sqlBinding。您是否能够检查您生成的 XML?我提到的一种类型化轮询方法应该仍然有效,假设您的 XML 刚刚嵌入到您提取它的意外位置。
    • 我成功完成了,您的提示对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多