【问题标题】:In Biztalk, how do I split an envelope with an extra element?在 Biztalk 中,如何拆分带有额外元素的信封?
【发布时间】:2012-11-01 08:50:12
【问题描述】:

我正在尝试按以下形式拆分传入消息:

 <Items>
    <BatchID>123</BatchID>
    <Item>...</Item>
    <Item>...</Item>
    <Item>...</Item>
  </Items>

我有一个带有 XML 反汇编程序的管道,它采用 Items 架构并输出 Item 架构。在 Items 架构上,Envelope 属性设置为 true,“Body XPath”属性指向 Items 元素。

但是,当我尝试处理文件时,我收到错误:Finding the document specification by message type "BatchID" failed. Verify the schema deployed properly.,可能是因为它只需要 Item 元素,并且它不知道如何处理 BatchID 元素。

如果我将 BatchID 设置为 Items 元素的属性(就像明智的人一样),一切正常。不幸的是,我被布局卡住了。

此时,我不在乎 BatchID 的值是多少。

我如何得到它来拆分消息?

【问题讨论】:

    标签: biztalk pipeline orchestration


    【解决方案1】:

    AFAIK Xml 反汇编程序总是提取指定body_xpath 元素的所有子节点 - 能够指定 Item Xpath 本来是一个不错的功能:(。

    您可以通过以下任一方式解决此限制:

    • 为不受欢迎的&lt;BatchID&gt; 元素创建一个模式,然后只吃它的实例,例如使用 TomasR 的 Null Adapter 创建订阅发送端口
    • 或者,在对包络进行分批之前,在接收端口上的映射中转换包络,其中转换去除不需要的Batch 元素

    以下 XSLT 应该可以解决问题:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0" xmlns:ns0="http://BizTalk_Server_Project3.Envelope">
        <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
        <xsl:template match="/">
            <xsl:apply-templates select="/ns0:Items" />
        </xsl:template>
        <xsl:template match="/ns0:Items">
            <ns0:Items>
                <!--i.e. Copy all Item elements and discard the Batch elements-->
                <xsl:copy-of select="ns0:Item"/>
            </ns0:Items>
        </xsl:template>
    </xsl:stylesheet>
    

    请参阅here,了解如何将 btm 从可视化地图转换为 xslt

    【讨论】:

    • 我想在我发布问题后自己做你的第二个要点。但是,debatching 是在发送端口上的管道中完成的,而管道是在接收端口上的映射之前完成的。
    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多