1

I have an xml file in which their is unit mentioned.

    <RQ>2.000</RQ>

I need to check in my xsl file whether in the value their is a + or - sign. If their is no sign then the default will be + sign. I was writing it with xsl:choose element but it was not working out.

4

2 回答 2

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>

但是请注意,对命名模板的调用占用了三行,而简单地使用一个衬垫需要,嗯,一行

于 2012-04-30T12:35:04.407 回答
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>
于 2012-04-30T07:21:59.973 回答