Если вы преобразуете всю свою карту в 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 обычно генерирует XSLT, как показано ниже, в типичном отображении 1: 1 nillable element
<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>
только с пробелами, если только вы не прошли карту, изменив ее обратно на <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 мог бы сделать это более элегантно