我一直在尝试将xsl应用于Analysis Service数据库返回的结果集。 结果集如下所示......
<Axis name="Axis1">
<Tuples>
<Tuple>
<Member Hierarchy="[Org].[Class1]">
<UName>[Org].[Class1].&[10629]</UName>
<Caption>Independent</Caption>
<LName>[Org].[Class1].[Ownership]</LName>
<LNum>2</LNum>
<DisplayInfo>65898</DisplayInfo>
<PARENT_UNIQUE_NAME>[Org].[Class1].&[2]</PARENT_UNIQUE_NAME>
</Member>
</Tuple>
<Tuple>
<Member Hierarchy="[Org].[Class1]">
<UName>[Org].[Class1].&[14331]</UName>
<Caption>A #5839</Caption>
<LName>[Org].[Class1].[Owner Region]</LName>
<LNum>3</LNum>
<DisplayInfo>65537</DisplayInfo>
<PARENT_UNIQUE_NAME>[Org].[Class1].&[10629]</PARENT_UNIQUE_NAME>
</Member>
</Tuple>
....
</Tuples>
</Axis>
<CellData>
<Cell CellOrdinal="0">
<FmtValue>Ownership</FmtValue>
</Cell>
<Cell CellOrdinal="1">
<ForeColor>0</ForeColor>
<FmtValue>73%</FmtValue>
</Cell>
<Cell CellOrdinal="2">
<ForeColor>0</ForeColor>
<FmtValue>68%</FmtValue>
</Cell>
<Cell CellOrdinal="3">
<ForeColor>0</ForeColor>
<FmtValue>70%</FmtValue>
</Cell>
<Cell CellOrdinal="4">
<ForeColor>0</ForeColor>
<FmtValue>59%</FmtValue>
</Cell>
<Cell CellOrdinal="5">
<FmtValue>Owner Region</FmtValue>
</Cell>
<Cell CellOrdinal="6">
<ForeColor>0</ForeColor>
<FmtValue>75%</FmtValue>
</Cell>
.....
</CellData>
上面的每个元组在CellData中都有一组相应的Cell。
因此,如果按顺序解析文件,则可以使用元组的position()
收集相关单元格。
但是,如果使用xsl-sort,LNum属性对元组进行排序,并使用for-each迭代,则元组的位置现在已更改,因此无法找到元组的相应单元格。
如何根据UName跟踪元组序数,以便我可以进入相关单元格。
我已经为UName创建了一个键
<xsl:key name="tuples-by-uName" match="/xa:root/xa:Axes/xa:Axis/xa:Tuples/xa:Tuple" use="xa:Member/xa:UName" />
<xsl:key name="tuples-by-parentUName" match="/xa:root/xa:Axes/xa:Axis/xa:Tuples/xa:Tuple" use="xa:Member/xa:PARENT_UNIQUE_NAME" />
并希望使用以下内容迭代元组。
<xsl:for-each select="key('tuples-by-parentUName', $thisQuestion/xa:Member/xa:UName)">
<xsl:sort data-type="number" select="xa:Member/xa:LNum" order="descending"/>
这里我需要元组的原始位置,以便我可以计算出细胞的位置。
花了很多时间,但无法想出这个。
答案 0 :(得分:1)
在xsl:for-each
:
<xsl:variable name="originalPosition" select="count(preceding::xa:Tuple) + 1"/>
或
<xsl:variable name="originalPosition">
<xsl:number count="xa:Tuple" level="any"/>
</xsl:variable>