Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Разрыв страницы / 4 сообщений из 4, страница 1 из 1
09.08.2007, 15:37
    #34717468
iga777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрыв страницы
Добрый день, чето переклинило: есть xml вида:
<TRAN ID = "1">
<NAZN>данные</NAZN>
<ROWS>4</ROWS>
</TRAN>
<TRAN ID = "2">
<NAZN>данные</NAZN>
<ROWS>9</ROWS>
</TRAN>
<TRAN ID = "3">
<NAZN>данные</NAZN>
<ROWS>13</ROWS>
</TRAN>
В тэге ROWS накопительно собираю число строк, как сделать так чтобы xsl при ROWS кратно некоему числу например 30 вставлял разрыв страницы? Мысль есть такая: завести переменную назовем ее Сount и сделать что-то типа

<xsl:variable name="Count" select="1"/>
<xsl:for-each ......
<xsl:variable name="Rows" select="ROWS"/>
<xsl:if test = '$Rows ?gt; Сount*30'>
????? <xsl:variable name="Count"> <xsl:value-of select="$Count+ 1"/> типа Count = Count+1
<DIV style="page-break-after: always;"> </DIV>
</xsl:if>
</xsl:for-each>

Но у меня не получается переприсвоить Сount, если я ее объявлю глобально (до вызова шаблонов)то Count в цикле всегда равен двум а локально (в шаблоне)
IE ругается "Переменная или параметр "Count" не могут быть определены дважды в пределах одного шаблона"
Кто может что-либо посоветовать? Заранее благодарен
...
Рейтинг: 0 / 0
15.08.2007, 22:07
    #34730865
joshua
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрыв страницы
Это надо делать или через рекурсию (посмотрите как делают for(i=0; i<10; i++) в xslt), но ябы попробовал через position()
...
Рейтинг: 0 / 0
16.08.2007, 09:58
    #34731342
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрыв страницы
Если rows увеличивается последовательно на 1:
Код: plaintext
1.
2.
3.
<xsl:if test="$rows mod 30 = 0">
<DIV style="page-break-after: always;"> </DIV>
</xsl:if>
Если не на 1 (т.е. может просто не быть числа кратного 30), тогда так
Код: plaintext
1.
2.
3.
<xsl:if test="floor($prevRows div 30) = floor($rows div 30)">
<DIV style="page-break-after: always;"> </DIV>
</xsl:if>
где $prevRows - предыдущее значение $rows. Только не пытайтесь его также переприсваивать :) xsl:variable используется для декларации переменных, а не их изменения. Переменные в XSLT неизменяемые.
...
Рейтинг: 0 / 0
17.08.2007, 01:35
    #34733854
makshoner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разрыв страницы
Схожий вопрос.
Есть исходный XML(Имеются "сектора", "субсектора" и "данные"):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<data>
  <sector id="s1">
    <subsector id="u1">
	<item id="i1" sector="s1" subsector="u1">item- 1 </item>
	<item id="i2" sector="s1" subsector="u1">item- 2 </item>
	...
	<item id="in" sector="s1" subsector="u1">item-n</item>
    </subsector>
    <subsector id="u2">
	<item id="i1" sector="s1" subsector="u2">item- 1 </item>
	<item id="i2" sector="s1" subsector="u2">item- 2 </item>
	...
	<item id="in" sector="s1" subsector="u2">item-n</item>
    </subsector>
	...
  </sector>
...
  <sector id="sn">
    <subsector id="u1">
	<item id="i1" sector="sn" subsector="u1">item- 1 </item>
	<item id="i2" sector="sn" subsector="u1">item- 2 </item>
	...
	<item id="in" sector="sn" subsector="u1">item-n</item>
    </subsector>
    <subsector id="u2">
	<item id="i1" sector="sn" subsector="u2">item- 1 </item>
	<item id="i2" sector="sn" subsector="u2">item- 2 </item>
	...
	<item id="in" sector="sn" subsector="u2">item-n</item>
    </subsector>
	...
  </sector>
</data>

Необходимо вывести данные в виде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
s: 1 
 ss: 1 
  item- 1 
  item- 2 
  item- 3 
  ...
  item-n
 ss: 2 
  item- 1 
  item- 2 
  item- 3 
  ...
  item-n
...
s:n
 ss: 1 
  item- 1 
  item- 2 
  item- 3 
  ...
  item-n

При этом после каждых 25-ти строк "данных" необходимо
вставить разрыв страницы
Код: plaintext
<span style="page-break-before: always"></span>
,
но вставлять его можно только перед "сектором" или "субсектором", но не в середине самих данных.

Подскажите Xslt преобразование?
Спасибо.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Разрыв страницы / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]