Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在联合XSLT中选择基于文档子类型的映射_Xml_Xslt_Biztalk_Canonical Schema - Fatal编程技术网

Xml 在联合XSLT中选择基于文档子类型的映射

Xml 在联合XSLT中选择基于文档子类型的映射,xml,xslt,biztalk,canonical-schema,Xml,Xslt,Biztalk,Canonical Schema,我创建了两个单独的映射,每个映射的源代码来自CDM模式。我现在必须创建第三个映射,它应该根据子类型(标题中的字段元素)选择要使用的正确映射 现在,我已经创建了一个Joint.xslt文件,其中包含选择和使用正确映射所需的逻辑 在我的场景中:如果子类型是“发票”,则应使用一个特定的映射。如果子类型是“ConsolidatedInvoice”,则应使用另一个映射 我考虑使用xsl:if元素对子类型进行测试: <xsl:variable name="var:InvoiceSubType" sel

我创建了两个单独的映射,每个映射的源代码来自CDM模式。我现在必须创建第三个映射,它应该根据子类型(标题中的字段元素)选择要使用的正确映射

现在,我已经创建了一个Joint.xslt文件,其中包含选择和使用正确映射所需的逻辑

在我的场景中:如果子类型是“发票”,则应使用一个特定的映射。如果子类型是“ConsolidatedInvoice”,则应使用另一个映射

我考虑使用xsl:if元素对子类型进行测试:

<xsl:variable name="var:InvoiceSubType" select="string(Header/InvoiceType/text())" />
<xsl:if test="$var:InvoiceSubType = 'Invoice'">
...use invoice map
</xsl:if>

…使用发票映射
但我不确定该怎么做。当组合来自两个映射的XSLT时,许多变量名会重复,例如,这会导致联合XSLT中出现错误

为了使用联合映射,我在映射属性中选择它作为自定义XSLT路径,而源模式是CDM


如果您需要更多信息,请告诉我。

您可以在Joint.xsl中使用XSLT的xsl:include和xsl:import机制来同时使用这两种机制

然后可以实现xsl:template来应用映射:

<xsl:template match="Header[contains(InvoiceType,'Invoice')]">
    ...
</xsl>

<xsl:template match="Header[contains(InvoiceType,'ConsolidatedInvoice')]">
    ...
</xsl>

...
...

好吧……别那样做。;)虽然XSL支持选择模板,但它破坏了映射程序

正确的BizTalk方法是使用发票映射器和ConsolidatedInvoice映射,正如您已经做的那样,然后决定在映射之外应用哪个映射,例如在编排中

为此添加或使用编排没有什么错。不要担心“性能”


另一个选项是升级属性、发送端口筛选器和。

谢谢您的回答,但我不允许为此公司策略使用编排。它必须在XSLT中完成。我试图在新创建的第三张地图中进行描述。找出政策是什么,然后我可以帮助你解释它是如何,嗯,错误的。实际上,这完全没有合法的理由,这意味着他们真的不知道BizTalk是如何工作的。当我尝试使用xsl:include元素时,我收到一个编译错误,上面说“禁止解析外部URI”。是的,这是BizTalk错误。这里有一些可行的解决方案,但我建议您使用模板并在其中插入不同的XSLT。