当源元素不存在时,BizTalk 映射中是否有强制创建目标元素而不使用 xslt 调用模板?
我将父/子 xml 映射到 wcf-sql 适配器生成的架构,该架构具有用于存储过程参数的表值参数。
所以我的源xml是:
<Category>
<CategoryId>1</CategoryId>
<CategoryName>Test</CategoryName>
</Category>
和/或带有媒体的类别
<Category>
<CategoryId>1</CategoryId>
<CategoryName>Test</CategoryName>
<Media>
<Medium>
<MediumId>1</MediumId>
<MediumName>test.jpg</MediumName>
</Medium>
</Media>
</Category>
TypedProcedure 的架构类似于:
<ImportCategoryRequest>
<Category>
<CategoryId>1</CategoryId>
<CategoryName>Test</CategoryName>
</Category>
<Media>
<Medium>
<MediumId>1</MediumId>
<MediumName>test.jpg</MediumName>
</Medium>
</Media>
</ImportCategoryRequest>
所以它不喜欢所有内容都显示在目标 XML 中。它不需要为表值参数传递 null 值,而是需要至少 1 行并为 tvp 中的列传递 null 值。我可以使用 xslt 调用模板创建虚拟 xml,但我想避免这种情况。
BizTalk 映射器似乎使用<xsl:for-each>
因此,如果没有输入,则不会生成输出元素。
但使用 xslt 确实很容易 - 请参阅here https://stackoverflow.com/questions/3716608/biztalk-2010-mapping-an-xsd-with-a-lot-of-elements-with-the-same-name/3718014#3718014如何从现有映射中删除 xslt(仅删除双引号和斜杠周围的转义),以及如何将映射更改为自定义 XSLT。
您需要更改媒体周围的部分,如下所示:
<xsl:choose>
<xsl:when test="count(ns0:Media)!=0">
<!-- Copy the mapper generated XSLT in the for each here-->
<xsl:foreach >
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<Media>
<Medium>
<MediumId>1</MediumId>
<MediumName>test.jpg</MediumName>
</Medium>
</Media>
</xsl:otherwise>
</xsl:choose>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)