Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Нумерация с помощью xsl


Автор: Стремянка 31.3.2006, 11:25
Возникла следующая проблема:
допустим есть xml

Код

<AAA > 
          <BBB> 
               <CCC>c11 </CCC> 
               <CCC>c12 </CCC> 
               <CCC>c13 </CCC> 
           </BBB> 
          <BBB> 
               <CCC>c21 </CCC> 
               <CCC>c22 </CCC> 
               <CCC>c23 </CCC> 
           </BBB> 
      </AAA>


нужно пронумеровать элементы CCC, но так чтобы было не
Код

с11 - 1
с12 - 2
с13 - 3
с21 - 1
с22 - 2
с23 - 3

как это делает <xsl:number value="position()"/>, а попорядку, т.е.
Код

с11 - 1
с12 - 2
с13 - 3
с21 - 4
с22 - 5
с23 - 6


Как этого можно добиться? и можно ли вообще? smile
Заранее спасибо smile

Автор: maxim1000 31.3.2006, 11:57
Цитата(Стремянка @ 31.3.2006, 10:25 Найти цитируемый пост)
как это делает <xsl:number value="position()"/>, а попорядку, т.е.

position() делает это по порядку, только он зависит от контекста, в котором перебираются узлы
т.е. если сначала сделать перебор по BBB, а для каждого этого узла отдельно сделать перебор по CCC (т.е. два вложенных for-each или то же самое с template match="..."), то каждый CCC будет воспринят в контексте своего BBB, а значит, номер будет 1,2,3

а можно сначала выбрать все CCC из всех BBB - объединить их в один массив как бы, а уже потом вызвать position...
Код

  <xsl:template match="AAA">
    <xsl:for-each select="BBB/CCC">
      <xsl:value-of select="."/> - <xsl:number value="position()"/>
      <br/>
    </xsl:for-each>
  </xsl:template>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)