首页 > 解决方案 > xslt for substring before and using or condition

问题描述

我是 XSLT 的新手。请求是 100KV 或 100MV 或 100GV 我想得到这些数字,所以我正在使用这给了我预期的结果。但我要比较输入可以是“K”、“M”还是“G”。我试过选择,效果很好。但是我有多个地方可以进行这种转换。有没有比选择更好的方法?通过它我可以在一个 xslt 中进行比较。

 <xsl:choose>
<xsl:when test='contains(//ns0:VALUE,"K")'> 
<tns:floatValue>
  <xsl:value-of select="substring-before(//ns0:VALUE,'K')"/>
 </tns:floatValue>
</xsl:when>
<xsl:when test='contains(//ns0:VALUE,"M")'> 
<tns:floatValue>
  <xsl:value-of select="substring-before(//ns0:VALUE,'M')"/>
 </tns:floatValue>
</xsl:when>
<xsl:when test='contains(//ns0:VALUE,"G")'> 
<tns:floatValue>
  <xsl:value-of select="substring-before(//ns0:VALUE,'G')"/>
 </tns:floatValue>
</xsl:when>
</xsl:choose>

标签: xsltsubstringxslt-1.0

解决方案


你可以这样做...

<xsl:value-of select="substring-before(translate(//ns0:VALUE, 'MG', 'KK'), 'K')"/>

因此,将 M 或 G 翻译成 K,然后只需找到 K 之前的子串。

或者,如果您想要真正通用,并在第一个非数字字符之前找到数字,您可以这样做......

<xsl:value-of select="substring-before(//ns0:VALUE, substring(translate(//ns0:VALUE, '1234567890', ''), 1, 1))"/>

请注意,您确定要使用,因为如果发生多个,//ns0:VALUE它将​​始终使用 XML 中的第一次出现?ns0:VALUE


推荐阅读