XSLT累积

问题描述

| 我有一个父变量和两个子变量进行累加 我想使用那两个子变量来选择两个不同的值 我只能对其进行硬编码以使其像所有其他教程一样工作 例如:$ parent [1] /价格和$ parent [1] /数量 但是相反,我想要以下内容
$parent[1]/$child1 where $parent[1] = orders[1]/order and $child1 = price
$parent[1]/$child2 where $parent[1] = orders[1]/order and $child2 = quantity

    <xsl:call-template name=\"total\">
    <xsl:with-param name=\"pList\" select=\"$parent\"/>
    <xsl:with-param name=\"price\" select=\"Price\"/>
    <xsl:with-param name=\"quantity\" select=\"Quantity\"/>   
    </xsl:call-template>

<xsl:template name=\"total\">
    <xsl:param name=\"pListItem\"/>
    <xsl:param name=\"pAccum\" select=\"0\"/>
    <xsl:param name=\"price\"/>
    <xsl:param name=\"quantity\"/>

    <xsl:choose>
      <xsl:when test=\"$pListItem\">
        <xsl:call-template name=\"total\">
          <xsl:with-param name=\"pListItem\" select=\"$pListItem[position() > 1]\"/>
          <xsl:with-param name=\"pAccum\"
           select=\"$pAccum + $vHead/$price * $vHead/$quantity\"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select=\"$pAccum\"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
    

解决方法

        目前尚不清楚问题是什么,但我的猜测是这样。 此转换:
<xsl:stylesheet version=\"1.0\"
 xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">
 <xsl:output omit-xml-declaration=\"yes\" indent=\"yes\"/>

 <xsl:param name=\"pPriceName\" select=\"\'price2\'\"/>
 <xsl:param name=\"pQuantityName\" select=\"\'quantity1\'\"/>


 <xsl:template match=\"/\">
  <xsl:call-template name=\"totalSales\">
   <xsl:with-param name=\"pSales\" select=\"/*/*\"/>
   <xsl:with-param name=\"pPriceName\" select=\"$pPriceName\"/>
   <xsl:with-param name=\"pQuantityName\"
        select=\"$pQuantityName\"/>
  </xsl:call-template>
 </xsl:template>

 <xsl:template name=\"totalSales\">
  <xsl:param name=\"pAccum\" select=\"0\"/>
  <xsl:param name=\"pSales\"/>
  <xsl:param name=\"pPriceName\"/>
  <xsl:param name=\"pQuantityName\"/>

  <xsl:variable name=\"vthisSale\" select=\"$pSales[1]\"/>

  <xsl:choose>
   <xsl:when test=\"not($vthisSale)\">
    <xsl:value-of select=\"$pAccum\"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:call-template name=\"totalSales\">
     <xsl:with-param name=\"pAccum\" select=
     \"$pAccum
     +
       $vthisSale/*[name()=$pPriceName]
      *
       $vthisSale/*[name()=$pQuantityName]
      \"/>
      <xsl:with-param name=\"pSales\" select=
       \"$pSales[position() >1]\"/>
      <xsl:with-param name=\"pPriceName\"
           select=\"$pPriceName\"/>
      <xsl:with-param name=\"pQuantityName\"
           select=\"$pQuantityName\"/>
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>
当应用于以下XML文档时(您至少可以提供此功能!):
<orders>
 <order>
  <price1>10</price1>
  <quantity1>3</quantity1>
  <price2>15</price2>
  <quantity2>1</quantity2>
 </order>
 <order>
  <price1>11</price1>
  <quantity1>2</quantity1>
  <price2>9</price2>
  <quantity2>3</quantity2>
 </order>
</orders>
产生想要的正确结果:
63
请注意:用作价格和数量的子元素名称的值作为转换的外部参数提供,并且只能在运行时知道。     ,        非常感谢。 我只需要\'
Price
\'和
$vthisSale/*[name()=$pPriceName]
真的有帮助!!我已经被魔术迷住了好多年了。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...