powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как узнать номер строки в xsl
22 сообщений из 22, страница 1 из 1
Как узнать номер строки в xsl
    #39549738
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, вывожу строки в шаблон, по умолчанию при сохранении в хml2003 суммирование ячеек явную формулу проставило

<Cell ss:StyleID="s74" ss:Formula="=SUM(R[-2]C:R[-1]C)"></Cell>

Как изменить на R[-n] где n последняя строка?

Т.е. как сделать чтобы последняя строка подбивала сумму всей колонки, как узнать количество уже выведенных строк.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39550312
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
<xsl:template match="Cell">\
  <xsl:if test="position() = count(..\Cell)">
    ...........
  </xsl:if>
</xsl:template
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39550315
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или еще проще
Код: xml
1.
2.
3.
4.
5.
<xsl:template match="Cell">\
  <xsl:if test="position() = last()">
    ...........
  </xsl:if>
</xsl:template>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39550439
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601954
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подниму тему, чето я в тот раз другим путем пошел, а сейчас таки надо определить номер строки и по этим советам не получается.
Может освежит кто.

Нужна переменная с номером последней заполненной строки. Как её получить?
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601967
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернее даже так.
Есть цикл, в котором я в зависимости от условия могу выводить строку, могу не выводить.

Если добавляют в код

<xsl:if test="position() = last()">
<Row>
<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
</Row>
</xsl:if>

то last = всем перебранным в цикле элементам.

Мне же просто нужен индекс строки, с которой бы продолжилось наполнение файла открой я новую строку. Дно файла)
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601968
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или хотя бы дайте пожалуйста пример как счетчик-переменную вести этом формате.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601969
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunЕсть циклГде?
leprechaunЕсли добавляют в кодКуда Вы это добавляете?
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601975
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня формируется лист с отчетом.

Сначала шапка, потом цикл наполняющий отчет данными (но не всеми подряд, выборочно от условия). А position внутри я так понял просто считает все проходы внутри этого цикла.

В конце соответственно идут итоги и на этот момент мне нужно знать сколько я уже строк реально вывел в документ, где его окончание-то.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39601977
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлял position() и last() в цикл чтобы посмотреть как вообще работают.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39602351
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunВ конце соответственно идут итогиТ.е. кода не будет
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39602405
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будет

Код: xml
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.
...
<!--какая-то фиксированная шапка-->
<Row>
	<Cell ss:Index="3" ss:MergeAcross="2" ss:StyleID="Default"><Data ss:Type="String">Шапка: </Data></Cell>
</Row> 

<xsl:for-each select="XX/LIST_G_SUBKONTO/G_SUBKONTO">	

	<!--беру только соответствующие условию строки-->
	<xsl:if test="number(CF_SUMEND_DRPERSUBKONTO) != 0 and number(CF_SUMEND_DRPERSUBKONTO) >= number(/XX/CF_DR_SUM)"> 
	
		<Row>
			<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_SUMEND_DRPERSUBKONTO"/></Data></Cell>
			<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_DR_SUM"/></Data></Cell>	  
		</Row>				
	</xsl:if> 

	<!--last показывает общее количество итераций-->		
		<xsl:if test="position() = last()">
			<Row ss:AutoFitHeight="0" ss:Height="15">
				<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
				<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
			</Row>
		</xsl:if>
		
</xsl:for-each>

<!--Итоги-->
<Row>
	<!--Мне нужно знать сколько уже реально заполнено строк-->
</Row> 
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39602535
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
<!--Мне нужно знать сколько уже реально заполнено строк-->
<xsl:value-of select="count(XX/LIST_G_SUBKONTO/G_SUBKONTO[number(CF_SUMEND_DRPERSUBKONTO)>= number(XX/CF_DR_SUM)])"/>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39602592
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Код: xml
1.
2.
<!--Мне нужно знать сколько уже реально заполнено строк-->
<xsl:value-of select="count(XX/LIST_G_SUBKONTO/G_SUBKONTO[number(CF_SUMEND_DRPERSUBKONTO)>= number(XX/CF_DR_SUM)])"/>



Спасибо, проверил, полезно, по моему примеру строки считает.
Но я чуть упростил код, внутри еще условие которое может добавлять одну или несколько вложенных строк.
А нет возможности устроить какой-то счетчик по сработавшим командам <Row /> или просто узнать где мы позиционно в файле.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39603080
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunили просто узнать где мы позиционно в файле.position()
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39603288
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_leprechaunили просто узнать где мы позиционно в файле.position()

Наверное я туплю, но всё же
position() - возвращает позицию или индекс узла относительно всех выбранных узлов в списке узлов

разве вернет мне она номер последней выведенной строки, я так понял просто считает уровни или количество итераций
а я хочу знать сколько строк отправил в документ командой Row. Которых может быть несколько в цикле.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39603346
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<xsl:for-each select="XX/LIST_G_SUBKONTO/G_SUBKONTO[
  number(CF_SUMEND_DRPERSUBKONTO) != 0 and number(CF_SUMEND_DRPERSUBKONTO) >= number(/XX/CF_DR_SUM)
]">
	<Row>
		<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_SUMEND_DRPERSUBKONTO"/></Data></Cell>
		<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_DR_SUM"/></Data></Cell>	  
	</Row>				

	<!--last показывает общее количество итераций-->		
	<xsl:if test="position() = last()">
		<Row ss:AutoFitHeight="0" ss:Height="15">
			<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
			<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
		</Row>
	</xsl:if>
</xsl:for-each>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39603380
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Так?


Я виноват не полный пример дал, с одной строкой будет верно, но строк то может быть несколько, как это сосчитать

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<xsl:for-each select="XX/LIST_G_SUBKONTO/G_SUBKONTO[
  number(CF_SUMEND_DRPERSUBKONTO) != 0 and number(CF_SUMEND_DRPERSUBKONTO) >= number(/XX/CF_DR_SUM)
]">
	<Row>
		<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_SUMEND_DRPERSUBKONTO"/></Data></Cell>
		<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_DR_SUM"/></Data></Cell>	  
	</Row>

	<!--Как сосчитать строки если их больше одной в цикле?-->
       <xsl:if a = "0">
	   <Row>
	   	<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_SUMEND_DRPERSUBKONTO_2"/></Data></Cell>
	   	<Cell ss:StyleID="72"><Data ss:Type="Number"><xsl:value-of select="CF_DR_SUM_2"/></Data></Cell>	  
   	   </Row>
       </xsl:if>

	<!--last показывает общее количество итераций-->		
	<xsl:if test="position() = last()">
		<Row ss:AutoFitHeight="0" ss:Height="15">
			<Cell ss:StyleID="Default"><Data ss:Type="String">Количество строк: </Data></Cell>
			<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="last()"/></Data></Cell>
		</Row>
	</xsl:if>
</xsl:for-each>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39603444
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaun,

Тогда используйте способ Antonariy

Код: xml
1.
2.
3.
4.
<xsl:value-of select="
  count(XX/LIST_G_SUBKONTO/G_SUBKONTO[number(CF_SUMEND_DRPERSUBKONTO)>= number(XX/CF_DR_SUM)]) +
  count(XX/LIST_G_SUBKONTO/G_SUBKONTO[number(CF_SUMEND_DRPERSUBKONTO)>= number(XX/CF_DR_SUM) and a = 0])
"/>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39604287
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде как-то втиснуть получается этот код. Спасибо.
Хотелось бы более простого решения, увы.
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39604315
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос остался, а как правильно в этой конструкции суммирование делать

у меня NaN возвращает код

Код: xml
1.
<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="sum(XX/LIST_G_SUBKONTO/G_SUBKONTO[number(CF_SUMEND_DRPERSUBKONTO) >= number(/XX/CF_DR_SUM)])"/></Data></Cell>
...
Рейтинг: 0 / 0
Как узнать номер строки в xsl
    #39604381
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunкак правильно в этой конструкции суммирование делатьЧто Вы пытаетесь просуммировать?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как узнать номер строки в xsl
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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