Отслеживание позиции после сортировки - PullRequest
1 голос
/ 07 июня 2011

Я пытался применить xsl к набору результатов, возвращенному базой данных службы анализа. Набор результатов выглядит следующим образом ...

<Axis name="Axis1">
  <Tuples>
    <Tuple>
      <Member Hierarchy="[Org].[Class1]">
        <UName>[Org].[Class1].&amp;[10629]</UName>
        <Caption>Independent</Caption>
        <LName>[Org].[Class1].[Ownership]</LName>
        <LNum>2</LNum>
        <DisplayInfo>65898</DisplayInfo>
        <PARENT_UNIQUE_NAME>[Org].[Class1].&amp;[2]</PARENT_UNIQUE_NAME>
      </Member>
    </Tuple>
    <Tuple>
      <Member Hierarchy="[Org].[Class1]">
        <UName>[Org].[Class1].&amp;[14331]</UName>
        <Caption>A #5839</Caption>
        <LName>[Org].[Class1].[Owner Region]</LName>
        <LNum>3</LNum>
        <DisplayInfo>65537</DisplayInfo>
        <PARENT_UNIQUE_NAME>[Org].[Class1].&amp;[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. Таким образом, если файл анализируется последовательно, соответствующие ячейки могут быть собраны с помощью 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"/>

Здесь мне нужно исходное положение кортежа, чтобы я мог рассчитать положение ячейки.

Потратил много времени, но не могу понять это.

1 Ответ

1 голос
/ 08 июня 2011

В пределах 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...