如果您将整个地图转换为 XSLT,则以下内容将去除换行符和空格,如果除了空格之外什么都没有,则为您留下一个空标签:
<xsl:element name="ROL_11_OfficeHomeAddress">
<xsl:if test="normalize-space(ROL_11_OfficeHomeAddress)">
<xsl:value-of select="normalize-space(ROL_11_OfficeHomeAddress)" />
</xsl:if>
</xsl:element>
编辑:Biztalk 通常在典型的 1:1 可空元素映射中生成如下所示的 XSLT
<xsl:variable name="var:v2" select="string(ns0:ROL_11_OfficeHomeAddress/@xsi:nil) = 'true'" />
<xsl:if test="string($var:v2)='true'">
<ns0:ROL_11_OfficeHomeAddress>
<xsl:attribute name="xsi:nil">
<xsl:value-of select="'true'" />
</xsl:attribute>
</ns0:ROL_11_OfficeHomeAddress>
</xsl:if>
<xsl:if test="string($var:v2)='false'">
<ns0:ROL_11_OfficeHomeAddress>
<xsl:value-of select="ROL_11_OfficeHomeAddress/text()" />
</ns0:ROL_11_OfficeHomeAddress>
</xsl:if>
因此,如果您确实使用<xsl:strip-space>
它,则意味着该元素将<ROL_11_OfficeHomeAddress></ROL_11_OfficeHomeAddress>
仅映射到 if whitespace,除非您通过映射将其更改回<xsl:element>
.
您可以尝试使用如下调用模板(nodeXfrm 是一个节点)
<xsl:template name="StripElement">
<xsl:param name="nodeXfrm"></xsl:param>
<xsl:variable name="nodeName">
<xsl:value-of select="local-name($nodeXfrm)"></xsl:value-of>
</xsl:variable>
<xsl:element name="{$nodeName}">
<xsl:if test="normalize-space($nodeXfrm)!=''">
<xsl:value-of select="$nodeXfrm/text()"/>
</xsl:if>
</xsl:element>
</xsl:template>
然后在您的地图中,您可以为需要以这种方式剥离的每个元素调用模板
<xsl:call-template name="StripElement">
<xsl:with-param name="nodeXfrm" select="ROL_11_OfficeHomeAddress"></xsl:with-param>
</xsl:call-template>
XSLT 专家可能能够更优雅地做到这一点