我试图绑定一定范围内的整数并以十进制格式输出。我意识到它永远是.0,任何现代语言应该能够轻松地将整数转换为浮点数。但无论如何我都有责任这样做。
示例输入看起来类似于以下
<data guid="25abab12-cb0a-5f37-8a11-121be3a74959">
<cork_id value="123456" valid="false"/>
<name> David Moe </name>
<is_bro>false</is_bro>
<some_test_value> 200012000 </some_test_value>
<standard_room_type> liquid </standard_room_type>
<environment> Groovy </environment>
</data >
<data guid="f5abab12-cb0a-5f37-8a11-121be3a74959">
<cork_id value="123456" valid="false"/>
<name> David Moe </name>
<is_bro>false</is_bro>
<some_test_value> 3 </some_test_value>
<standard_room_type> liquid </standard_room_type>
<environment> Groovy </environment>
</data>
<data guid="a5abab12-cb0a-5f37-8a11-121be3a74959">
<cork_id value="123456" valid="false"/>
<name> David Moe </name>
<is_bro>false</is_bro>
<some_test_value> 250 </some_test_value>
<standard_room_type> liquid </standard_room_type>
<environment> Groovy </environment>
</data >
预期输出将复制上面的xml,但将some_test_value元素更改为5和100范围内,并在末尾添加.0以使其成为浮点类型。
例如,
<some_test_value> 200012000 </some_test_value>
会变成
<some_test_value> 500.0 </some_test_value>
和 3
会变成
<some_test_value> 5.0 </some_test_value>
最后 250
会变成
<some_test_value> 250.0 </some_test_value>
我对xslt的错误尝试将如下所示
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- This is the copy identity -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match ="//some_test_value/text()">
<xsl:choose>
<xsl:when test="//some_test_value/text()[. > 500 ]">
500.0
</xsl:when>
<xsl:when test="//some_test_value/text()[. < 5 ]">
5.0
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='format-number(".","#.0")'/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="some_test_value">
<xsl:copy>
<xsl:choose>
<xsl:when test=". < 5">5.0</xsl:when>
<xsl:when test=". > 500">500.0</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number(., '#.0')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>