我想基于我的XML中可用的参数执行动态分组。当我尝试没有varaviable它可以工作,但如果我使用变量,我没有结果。经过大量的研究,我还没有找到解决方案。专家可以帮帮我吗? 数据(XML)......摘录
<dbquery id="KPI_SUMMARY">
<descriptor>
<database>dbnode</database>
<originalquery> select something </originalquery>
<parameters>
<param value="STATUS" name="pR1"/>
<param value="PRIORITY" name="pR2"/>
<param value="YEAR" name="pC1"/>
</parameters>
<querystring> select something </querystring>
</descriptor>
<columns>
<column name="NBR" type="BIGINT"/>
<column name="YEAR" type="INTEGER"/>
<column name="STATUS" type="VARCHAR"/>
<column name="MISSION_CODE" type="VARCHAR"/>
<column name="PRIORITY" type="VARCHAR"/>
</columns>
<rows>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="H" YEAR="2006" NBR="2"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="A" YEAR="2007" NBR="1"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="H" YEAR="2007" NBR="2"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="E" YEAR="2008" NBR="3"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="A" YEAR="2009" NBR="28"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="P" YEAR="2010" NBR="76"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="D" YEAR="2011" NBR="114"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="A" YEAR="2012" NBR="62"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="D" YEAR="2013" NBR="5"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="A" YEAR="2013" NBR="104"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="B" YEAR="2014" NBR="4"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="H" YEAR="2014" NBR="3"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="P" YEAR="2014" NBR="331"/>
<row PRIORITY="None" MISSION_CODE="No Mis" STATUS="E" YEAR="2014" NBR="3"/>
</rows>
</dbquery>
有关信息:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
硬编码转换
<xsl:for-each-group select = "//dbquery[@id='KPI_SUMMARY']/rows/row" group-by="@STATUS">
<xsl:value-of select="current-grouping-key()"/> : <xsl:value-of select="sum(current-group()/@NBR)"/><br/>
</xsl:for-each-group>
结果是html
H : 7
A : 195
E : 6
P : 407
D : 119
B : 4
动态转型
<xsl:variable name="VarGpBy">@<xsl:value-of select="//dbquery[1]/descriptor/parameters/param[@name='pR1']/@value"/></xsl:variable>
Grouping Key : <xsl:value-of select='$VarGpBy'/><br/>
<xsl:for-each-group select = "//dbquery[@id='KPI_SUMMARY']/rows/row" group-by="$VarGpBy">
<xsl:value-of select="current-grouping-key()"/> : <xsl:value-of select="sum(current-group()/@NBR)"/><br/>
</xsl:for-each-group>
结果是html
Grouping Key : @STATUS
@STATUS : 738
使用动态方法,似乎该组不使用属性@STATUS但字符串@STATUS 如何解决此问题,因为目的是创建一个模板,可以使用参数进行分组选择
事先提前答案 0 :(得分:1)
将变量定义为<xsl:variable name="att-name" select="//dbquery[1]/descriptor/parameters/param[@name='pR1']/@value"/>
,然后使用
<xsl:for-each-group select = "//dbquery[@id='KPI_SUMMARY']/rows/row" group-by="@*[local-name() = $att-name]">
<xsl:value-of select="current-grouping-key()"/> : <xsl:value-of select="sum(current-group()/@NBR)"/><br/>
</xsl:for-each-group>