我对xslt相当新,所以我可能会遗漏一些简单的东西,但我似乎无法找到它。我正在尝试构造一个具有多个条件的when子句。这就是我所拥有的。
<xsl:when test="(string-length(current()/SSN/text())) = 9 AND not(string(number(current()/SSN/text())) = 'NaN')">
<IdCodeQualifier>
<xsl:value-of select="'34'" />
</IdCodeQualifier>
<SSN>
<xsl:value-of select="current()/SSN/text()" />
</SSN>
</xsl:when>
这导致:
(97,16)的XSLT编译错误。有关详细信息,请参阅InnerException。 'boolean((string-length(current()/ SSN / text()))= 9 AND not(string(number(current()/ SSN / text()))='NaN'))'是无效的XPath表达。 'boolean((string-length(current()/ SSN / text()))= 9 AND not(string(number(current()/ SSN / text()))='NaN'))'有一个无效的令牌
然而这很好。
<xsl:when test="string-length(current()/SSN/text()) = 9">
<xsl:if test="string(number(current()/SSN/text())) != 'NaN'">
<IdCodeQualifier>
<xsl:value-of select="'34'" />
</IdCodeQualifier>
<SSN>
<xsl:value-of select="current()/SSN/text()" />
</SSN>
</xsl:if>
</xsl:when>
那么我错过了什么?
答案 0 :(得分:1)
使用and
代替AND
。 XPath区分大小写。
答案 1 :(得分:1)
正如Kiril所说,AND
无效XPath。
你的表达也比他们需要的更冗长。你应该能够解决这个问题:
<xsl:when test="string-length(SSN) = 9 and number(SSN) = number(SSN)">
<IdCodeQualifier>
<xsl:value-of select="'34'" />
</IdCodeQualifier>
<SSN>
<xsl:value-of select="SSN" />
</SSN>
</xsl:when>
一般情况下,我建议限制您使用text()
,除非您有特殊需要使用它。