在没有使用xslt调用模板的情况下,当源元素不存在时,BizTalk映射中是否存在强制目标元素的创建?
我将父/子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中的列传递空值。我可以使用xslt调用模板创建虚拟xml,但我想避免这种情况。
答案 0 :(得分:3)
BizTalk映射器似乎使用<xsl:for-each>
,因此如果没有输入,则不会生成输出元素。
但是使用xslt非常简单 - 请参阅here如何从现有地图中删除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>