我有一个xml文件,其中提到了单位。
<RQ>2.000</RQ>
我需要检查我的xsl文件中的值是否为+或 - 符号。如果它们没有符号,那么默认值为+符号。 我用xsl:choose元素编写它但它没有用完。
答案 0 :(得分:0)
如果您想使用 xsl:choose ,您可以执行以下操作
<xsl:template match="RQ">
<xsl:choose>
<xsl:when test="number() != number()">NaN</xsl:when>
<xsl:when test="number() >= 0">+</xsl:when>
<xsl:otherwise>-</xsl:otherwise>
</xsl:choose>
</xsl:template>
这也可以处理不包含数字的元素。或者,您可以更好地使用模板匹配,并且无需使用 xsl:choose 。
<xsl:template match="RQ[number() != number()]">NaN</xsl:template>
<xsl:template match="RQ[number() >= 0]">+</xsl:template>
<xsl:template match="RQ">-</xsl:template>
答案 1 :(得分:0)
如果可以保证RQ
是数字的有效表示,那么只需使用:
substring('+-', 2 - (RQ > 0), 1)
完整演示:
这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select=
"substring('+-', 2 - (RQ > 0), 1)"/>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<RQ>-2.000</RQ>
生成想要的正确结果:
-
,当应用于此文档时:
<RQ>2.000</RQ>
再次产生正确的结果:
+
如果需要,可以将这个单行XPath表达式封装在一个单独的命名模板中,以便从代码中的不同位置调用 - 比如:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:call-template name="sign">
<xsl:with-param name="pNum" select="RQ"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="sign">
<xsl:param name="pNum"/>
<xsl:value-of select=
"substring('+-', 2 - (RQ > 0), 1)"/>
</xsl:template>
</xsl:stylesheet>
但请注意,对指定模板的调用占用三行,而只使用一行,需要一行。