关于使用xsl:选择

时间:2012-04-30 04:42:39

标签: xml xslt xslt-1.0

我有一个xml文件,其中提到了单位。

    <RQ>2.000</RQ>

我需要检查我的xsl文件中的值是否为+或 - 符号。如果它们没有符号,那么默认值为+符号。 我用xsl:choose元素编写它但它没有用完。

2 个答案:

答案 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>

但请注意,对指定模板的调用占用三行,而只使用一行,需要一行