一起使用 xslt choose 和 format-number
Using xslt choose and format-number together
我试图将一个整数绑定在一定范围内,并以十进制格式输出。我意识到它永远是 .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>
尝试:
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>
我试图将一个整数绑定在一定范围内,并以十进制格式输出。我意识到它永远是 .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>
尝试:
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>