xml – 如何在XSLT中对几个节点的值求和
我需要一个循环到特定节点位置()和这些节点的总和.例如:
>如果我的位置是2,则节点[1]节点[2] 怎么能在XSLT中完成? 有跟随xml <?xml-stylesheet type="text/xsl" href="sum.xsl"?><root><FIDetail Node1="5" Node2="2" Node3="9" Node4="5" Node5="1" Node6="6" Node7="5" Node8="5" Node9="12" Node10="6" Node11="4" Node12="8" Node13="4" Node14="6" Node15="5" Node16="6" Node17="2" Node18="7" Node19="4" Node20="5" Node21="4" Node22="6" Node23="4" Node24="11" Node25="5" Node26="1" Node27="7" Node28="1" Node29="4" Node30="2" Node31="5" Node32="2" Node33="6" Node34="4" Node35="7" Node36="7" Node37="9" Node38="10" Node39="3" Node40="8" Node41="8" Node42="5" Node43="5" Node44="2" Node45="5" Node46="12" Node47="9" Node48="14" Node49="18" Node50="1"/></root> 我想显示输出如下 节点1的总和 7 Node1 Node2的总和 16 Node1 Node2 Node3的总和 …. Node1的总和… Node50 任何人请帮助我,XSL将是什么 不工作xsl如下 <?xml version="1.0" encoding="UTF-8"?> ???? <xsl:for-each select="//FIDetail/@*"> <br/> <xsl:value-of select="sum(preceding-sibling::*) + ."/> = <xsl:for-each select="preceding-sibling::*"> <xsl:value-of select="name()"/> + </xsl:for-each> <xsl:value-of select="name()"/> </xsl:for-each> </xsl:template> 解决方法
您可能能够拼凑出似乎有效的解决方案,但这是一个固有的问题,您的解决方案将会破裂.
问题是XML中的属性没有重要的顺序.您不能依赖于在XSLT内部或外部呈现给任何进程的属性,它们与文本中出现的顺序相同.坦率地说,我很惊讶XSLT甚至允许你在属性谓词中使用position(). (顺便说一下,这就是身份变换使用奇数模式select =“node()| @ *”的原因.由于node()与属性不匹配,因此需要@ *.因为node()与属性不匹配,属性不是节点.节点有位置,属性没有.) 如果您的应用程序依赖于属性的排序,那么它就会被破坏,您需要重新设计它. 但是,如果您可以依赖属性的名称来提供某种排序,那么还有一种方法,如您的示例所示: <xsl:variable name="atts" select="@*"/> <xsl:for-each select="$atts"> <xsl:sort select="substring-after(name(),'Node')" data-type="number"/> <td> <xsl:variable name="this" select="number(substring-after(name(),'Node'))"/> <xsl:value-of select="sum($atts[ number(substring-after(name(),'Node')) <= $this])"/> </td> </xsl:for-each> 那难看吗?你打赌.如果您稍微更改了属性命名方案,它就会中断.但它会工作,但属性是有序的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |