gpt4 book ai didi

XSLT 1.0 累加、求和、乘法

转载 作者:行者123 更新时间:2023-12-01 11:06:57 26 4
gpt4 key购买 nike

我有一小部分固定节点:<a> , <b> , <c> , <d> .每个节点的值可以是 1 或 0。此外,每个节点的权重分别为:1、2、3、4。不使用节点属性。如何使用 XSLT 1.0 将每个节点的值乘以其权重相加?示例:

<a>0</a>
<b>1</b>
<c>0</c>
<d>1</d>

总数:6

<a>1</a>
<b>1</b>
<c>0</c>
<d>0</d>

总数:3

<a>0</a>
<b>1</b>
<c>1</c>
<d>1</d>

总数:9

最佳答案

这个 XSLT 1.0 转换:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/*">
<xsl:call-template name="sumWeighted"/>
</xsl:template>

<xsl:template name="sumWeighted">
<xsl:param name="pList" select="*"/>
<xsl:param name="pIndex" select="1"/>
<xsl:param name="pAccum" select="0"/>

<xsl:choose>
<xsl:when test="$pIndex > count($pList)">
<xsl:value-of select="$pAccum"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="sumWeighted">
<xsl:with-param name="pList" select="$pList"/>
<xsl:with-param name="pIndex"
select="$pIndex+1"/>
<xsl:with-param name="pAccum"
select="$pAccum+$pList[$pIndex]*$pIndex"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<t>
<a>0</a>
<b>1</b>
<c>0</c>
<d>1</d>
</t>

,

<t>
<a>1</a>
<b>1</b>
<c>0</c>
<d>0</d>
</t>

<t>
<a>0</a>
<b>1</b>
<c>1</c>
<d>1</d>
</t>

分别产生想要的结果:

6

3

9


引用:

如果您想使用 XSLT 进行非常复杂的数学计算,请参阅:

http://fxsl.sourceforge.net/articles/xslCalculator/The%20FXSL%20Calculator.html


XPath 2.0/XSLT 2.0 解决方案:

只使用这个 XPath 2.0 一行代码:

   sum(/*/*/(number()*position()))

关于XSLT 1.0 累加、求和、乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522993/

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