xslt - 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>
解决方案
你可以这样做...
<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
推荐阅读
- macos - 如何以非交互方式显示`top`的第一行?
- go - gorename failing in VS Code without explicit error
- ruby-on-rails - 系列的日期时间格式 - Highcharts
- swift - ARImageTrackingConfiguration.isSupported always returning false
- android - How to put custom sound in app? Android Studio
- python - My pip is installing all the modules in the Python3.4
- arrays - 根据 mule Dataweave 中另一个列表中的值有效替换列表中的值
- excel - Having trouble getting Excel VBA code to execute consistently. First time using a collection
- pandas - How to plot two columns of a specific index range?
- amazon-web-services - Unable to tag EBS Volumes using UserData bash script