gpt4 book ai didi

xml - 在 XSLT 中用逗号作为小数点分隔符求和数字?

转载 作者:数据小太阳 更新时间:2023-10-29 02:48:00 25 4
gpt4 key购买 nike

我有一个 XML 文件,其中数字以逗号分隔

<foo>
<bar val="1,23"/>
<bar val="4,56"/>
<bar val="7,89"/>
</foo>

我想对 XSLT 中的 /foo/bar/@val 值求和,但我有点卡在格式上。有谁知道正确的语法是什么?

最佳答案

我猜测,“val” 属性中指定的值是一个用逗号代替小数点的数字。

有几种可能的解决方案:

我。 XSLT 1.0

这个转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<xsl:output method="text"/>
<!-- -->
<xsl:template match="foo">
<xsl:variable name="vrtfBars">
<xsl:for-each select="bar">
<bar val="{translate(@val, ',', '.')}"/>
</xsl:for-each>
</xsl:variable>
<!-- -->
<xsl:value-of select=
"sum(ext:node-set($vrtfBars)/*/@val)"/>
</xsl:template>
</xsl:stylesheet>

应用于最初提供的 XML 文档时:

<foo>
<bar val="1,23"/>
<bar val="4,56"/>
<bar val="7,89"/>
</foo>

产生想要的结果:

13.68

二。 XSLT 2.0

这个转换:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="f xs"
>
<xsl:output method="text"/>
<!-- -->
<xsl:template match="foo">
<xsl:sequence select=
"sum(bar/@val/number(translate(., ',', '.')))"
/>
</xsl:template>
</xsl:stylesheet>

应用于同一个 XML 文档时,产生相同的正确结果:

13.68

III. FXSL 2.x

这个转换:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://fxsl.sf.net/"
xmlns:my="my:fun"
exclude-result-prefixes="my f xs"
>
<xsl:import href="../f/func-transform-and-sum.xsl"/>
<!-- -->
<xsl:output method="text"/>
<!-- -->
<xsl:template match="foo">
<xsl:sequence select=
"sum(
f:transform-and-sum(my:makeNum(), bar/@val )
)"
/>
</xsl:template>
<!-- -->
<xsl:function name="my:makeNum" as="xs:double">
<xsl:param name="psNum" as="xs:string"/>
<!-- -->
<xsl:sequence select="number(translate($psNum, ',', '.'))"/>
</xsl:function>
<!-- -->
<xsl:function name="my:makeNum" as="element()">
<my:makeNum/>
</xsl:function>
<!-- -->
<xsl:template match="my:makeNum" as="xs:double" mode="f:FXSL">
<xsl:param name="arg1" as="xs:string"/>
<!-- -->
<xsl:sequence select="my:makeNum($arg1)"/>
</xsl:template>
</xsl:stylesheet>

应用于同一 XML 文档时产生相同的正确结果:

13.68

最后一种解决方案更灵活,当需要在求和之前对值进行更复杂的转换时可以成功使用。

关于xml - 在 XSLT 中用逗号作为小数点分隔符求和数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com