powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с паблишером
12 сообщений из 12, страница 1 из 1
Помощь с паблишером
    #39602282
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, что-то ищу ответ на вроде бы простой вопрос по XSL и не нахожу.

Формирую отчет, есть шаблон XSL. После прохода цикла мне просто нужно узнать номер последней выведенной командой ROW строки.
При этом не все строки я беру, а position() и last() считают каждую итерацию.

Ну вот можно же принудительно написать <Row ss:Index="10" или если не указывать индекс явно, то автоматом следующая используется.

Нужно узнать текущий индекс в конце работы с данными. Или как организовать переменную в которую запишу сколько строк уже выведено (но прочел что переменных XSL не изменяются).

Боюсь что тут http://www.sql.ru/forum/1276463/kak-uznat-nomer-stroki-v-xsl ответа не дождусь, может в этой ветке помогут.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602297
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.к. не нужно спрашивать на форуме то, что легко находится в гугле )))

К примеру:
http://adivaconsulting.com/bi-publisher/item/81-rtf-template-working-with-variables.html

Насколько я помню, сам BI Publisher достаточно активно счетчики в .RTF шаблонах использует. Т.ч. переназначать BI Publisher переменные вполне можно (это не чистые переменные XSL, а переменные BI Publisher'а)

Как вызвать xdoxslt ф-ции из XSL шаблона (надо ли их как-то описывать), не знаю. Но всегда можно посмотреть на XSL-FO шаблоны генерируемые паблишером.

IMHO & AFAIK.

p.s. С паблишером работал лет 10 назад (((
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602304
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не нагуглил к сожалению, читаю XSLT.

Простое же вроде действие, узнать индекс последней строки, в которую подавали данные. Мне нужно это именно в файле сделать. Думал на поверхности ответ.

Нужно или считать самому (но как если пишут о xsl:variable "переменные в XSLT нельзя изменять") или всё же думаю должен быть встроенный метод.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602488
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--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> и Ваши Rows.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602601
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--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> и Ваши Rows.

В цикле last() показывает сколько итераций прошло. За циклом выводит 1.

Что мне надо, просто хочу узнать сколько раз выполнилась команда <Row> </Row>, т.е. сколько я уже строк в выходном файле заполнил.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602621
KateNast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работала с этой программой, очень тяжелая вещь
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602629
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KateNastработала с этой программой, очень тяжелая вещь
Назвать XML Publisher очень тяжелой вещью.....

Это Вы наверное на Oracle Reports не работали, после Репортсов XML Publisher "как каравелла по зелёным волнам, прохладным ливнем после жаркого дня" ( С )

)))

IMHO
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602933
VARCHAR4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunK790Не совсем понятно, что Вы хотите, но зачем Вы этот кусок
Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<!--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> и Ваши Rows.

В цикле last() показывает сколько итераций прошло. За циклом выводит 1.

Что мне надо, просто хочу узнать сколько раз выполнилась команда <Row> </Row>, т.е. сколько я уже строк в выходном файле заполнил.

Ту на помощь приходит variable...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:for-each select="//G_ROWS">  
	<Row ss:AutoFitHeight="0" ss:Height="15">
		<Cell ss:StyleID="Default"><Data ss:Type="String">Cтрока</Data></Cell>
		<Cell ss:StyleID="Default"><Data ss:Type="String"><xsl:value-of select="position()"/></Data></Cell>
	</Row>
	<xsl:variable name="varCOUNT_ROWS"><xsl:value-of select="last()"/></xsl:variable>	
</xsl:for-each>
	<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="$varCOUNT_ROWS"/></Data></Cell>
	</Row>
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39602995
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VARCHAR4000

Ту на помощь приходит variable...



Так да пришла бы на помощь variable, но в цикле что Вы указали last() будет считать просто количество итераций, а я могу и по 2-3 строки добавлять внутри.
Если бы она как нормальная переменная могла наращивать значение счетчиком +1, то и вопроса бы не было.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39603070
VARCHAR4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leprechaunVARCHAR4000

Ту на помощь приходит variable...



Так да пришла бы на помощь variable, но в цикле что Вы указали last() будет считать просто количество итераций, а я могу и по 2-3 строки добавлять внутри.
Если бы она как нормальная переменная могла наращивать значение счетчиком +1, то и вопроса бы не было.

Не совсем понял...

Если идет речь о вложенности циклов, в каждом цикле объявляйте свою переменная...
Так это и есть обычная переменная, инициализируйте ее сначала 0, а в цикле инкрементируйте...

Не вижу проблем...
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39603292
leprechaun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot VARCHAR4000]leprechaunпропущено...

Не совсем понял...

Если идет речь о вложенности циклов, в каждом цикле объявляйте свою переменная...
Так это и есть обычная переменная, инициализируйте ее сначала 0, а в цикле инкрементируйте...

Не вижу проблем...

Да как её наращивать эту переменную, если тут написано https://xsltdev.ru/xslt/xsl-variable/
что переменные в XSLT нельзя изменять.
Как я понял могу лишь раз объявить как хранилище значения. Если бы в цикле была одна строка, их еще можно сложить, но в моём одном цикле может быть 2-3 команды Row и не этот счетчик с каждой не увеличить, считать будет только итерации.
...
Рейтинг: 0 / 0
Помощь с паблишером
    #39605063
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех у кого нет рук ))), пример из моего ответа выше (2-ое сообщение в данной теме) в виде XSL шаблона. Самое сложное было XML Publisher Desktop поставить (((

проверял в BI Publisher Template Viewer в режиме XSLT

XML файл с данными для проверки
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
 <NAME>Template Expert</NAME>
 <DESCRIPTION>Congratulations on your first Template</DESCRIPTION>
 <ROWS>
   <ROW><NAME>1</NAME></ROW>
   <ROW><NAME>2</NAME></ROW>
   <ROW><NAME>3</NAME></ROW>
   <ROW><NAME>4</NAME></ROW>
 </ROWS>
</DATA>



Собственно XSLT-шаблон с инкрементом Publisher-ой переменной counter
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xdoxliff="urn:oasis:names:tc:xliff:document:1.1" xmlns:xdoxslt="http://www.oracle.com/XSL/Transform/java/oracle.xdo.template.rtf.XSLTFunctions" xmlns:xdofo="http://xmlns.oracle.com/oxp/fo/extensions" xmlns:ora="http://www.oracle.com/XSL/Transform/java/" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   <xsl:param name="_XDOCTX">#</xsl:param>
   <xsl:template match="/">
     <xsl:value-of select="xdoxslt:set_variable($_XDOCTX, 'counter', 0)"/>
     <xsl:for-each select=".//ROW">
        <xsl:value-of select="xdoxslt:set_variable($_XDOCTX, 'counter', xdoxslt:get_variable($_XDOCTX, 'counter') + 1)"/>
        Row processing.
      </xsl:for-each>
End of rows. Counter=<xsl:value-of select="xdoxslt:get_variable($_XDOCTX, 'counter')"/>
   </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с паблишером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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