问题描述
|
我有一个父变量和两个子变量进行累加
我想使用那两个子变量来选择两个不同的值
我只能对其进行硬编码以使其像所有其他教程一样工作
例如:$ 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]
真的有帮助!!我已经被魔术迷住了好多年了。