总结从一个面孔循环返回的X Paths的价值



在xslt 1.0/xpath 1.0中,不使用任何外部库/节点设置扩展名,我需要能够将特定项目的项目的成本值(对于个人份额)总和类型。例如,在下面的示例XML中,我如何将"框"类型的成本和"安德鲁"类型总结?此的预期输出为" 1500"(0.5*1000 1*1000)。

`<items>
    <item>
        <type>Box</type>
        <cost>1000.00</cost>
        <share>
            <person>
                <name>Jim</name>
                <percent>50</percent>
            </person>
            <person>
                <name>Andrew</name>
                <percent>50</percent>
            </person>
        </share>
    </item>
    <item>
        <type>Box</type>
        <cost>1000.00</cost>
        <share>
            <person>
                <name>Andrew</name>
                <percent>100</percent>
            </person>
        </share>
    </item>
    <item>
        <type>Car</type>
        <cost>2000.00</cost>
        <share>
            <person>
                <name>Andrew</name>
                <percent>100</percent>
            </person>
        </share>
    </item>
    <item>
        <type>Box</type>
        <cost>2000.00</cost>
        <share>
            <person>
                <name>Jim</name>
                <percent>100</percent>
            </person>
        </share>
    </item>
</items>`

在XSLT中,我可以有一个for-EAK循环:

`<xsl:for-each select="/items/item[type='Box' and share/person/name='Andrew']">
    <xsl:value-of select="share/person[name='Andrew']/percent div 100) * cost"/>
</xsl:for-each>`

,但这不会总结总数。我认为不能使用sum(),因为它需要按每个特定项目的金额多倍份额。由于XSLT限制,我不知道如何将其存储在带有for-EAPH内部的变量中。我认为递归可能可以使用,但我不确定如何使用。

哪个XSL扩展,您可以这样做:

     <!-- first, store all the computed values to be summed up in a variable -->
     <xsl:variable name="vals">
         <xsl:for-each select="/items/item[type/text() ='Box' and share/person/name/text() = 'Andrew']">
                <val><xsl:value-of select="(cost * share/person[name/text() = 'Andrew']/percent) div 100"/></val>
          </xsl:for-each>
     </xsl:variable>
     <!-- Get the sum of all the values -->
     <xsl:value-of select="sum(exsl:node-set($vals)/*)" />

您还需要在样式表的根元素上添加以下声明:xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"

最新更新