我有下面的条件,我已经用下面的xsl写过了..
因为我在xml中得到了一个值fpml:tradeId,现在它可以存在于xml中,也可以不存在,例如,如下所示。
<fpml:tradeId tradeIdScheme=""></fpml:tradeId>
or it can contain value also
<fpml:tradeId tradeIdScheme="">10381159400</fpml:tradeId>作为建议,我已将实现更改为,但仍不起作用..
<xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
<xsl:value-of select="'null'" />
</xsl:if>
</ContractID>
<xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId != ' '">
<xsl:choose>
<xsl:when test="contains(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')">
<xsl:value-of select="substring-before(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId" />
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
<xsl:value-of select="'null'" />
</xsl:if>
</ContractID>建议新的实现已完成,但仍不起作用..
<xsl:if test="normalize-space(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">
<xsl:choose>
<xsl:when test="contains(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')">
<xsl:value-of select="substring-before(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId" />
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
<xsl:value-of select="'null'" />
</xsl:if>
</ContractID>发布于 2015-03-06 00:24:09
你要测试的是
fpml:tradeId = ' '但在您的示例中并非如此- fpml:tradeId的值是空字符串,而不是包含空格的字符串。而不是将第一种情况的值与' '进行比较,您可以使用
<xsl:if test="normalize-space(
fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">在XPath中,字符串强制为布尔值,如果字符串为空,则将其视为false,如果不为空,则将其视为true。因此,如果tradeId值包含至少一个非空格字符,则测试将通过,如果该值完全为空或仅包含空格,则测试将失败。
对于第二种情况
<xsl:if test="not(normalize-space(
fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId))">如果字符串全为空格,则为true,否则为false (或者只使用带有otherwise子句的choose,而不是两个相反的if测试)。
https://stackoverflow.com/questions/28882502
复制相似问题