我有以下条件,我已经在下面的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下面提出了这个问题,现在的问题是,对于在xml中不存在tradeId的情况,它不会放入空字符串请指教我的下面是执行 xsl是正确的
<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>
答案 0 :(得分:1)
您正在测试
fpml:tradeId = ' '
它在你的例子中没有 - 你的fpml:tradeId
的值是空字符串,而不是包含空格的字符串。对于第一种情况,您可以使用
' '
进行比较
<xsl:if test="normalize-space(
fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">
在XPath中,字符串强制转换为布尔值,如果字符串为空则将其视为false;如果不是,则将其视为true,因此如果tradeId
值包含至少一个非{0},则测试将通过空格字符,如果它是完全空的或只包含空格则会失败。
对于第二种情况
<xsl:if test="not(normalize-space(
fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId))">
会给你反向测试 - 如果字符串全是空白或空,则为true;如果不是,则为false(或者仅使用带有choose
子句的otherwise
而不是两个if
测试)。