powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод данных в таблице в несколько колонок
13 сообщений из 13, страница 1 из 1
вывод данных в таблице в несколько колонок
    #36003790
prog_dog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте все зашедшие, подскажите плиз, вывожу данные из БД в виде xml использую для преобразования их в таблицу php и xsl, к примеру 1000 номеров будет выглядеть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
num date
---- -----
 001    01 . 02 . 09 
 002    01 . 02 . 09 
 003    01 . 02 . 09 
 004    01 . 02 . 09 
 005    01 . 02 . 09 
 006    01 . 02 . 09 
---
 999    01 . 02 . 09 
 1000   01 . 02 . 09 

выодиттся все это в IE и понятно что для просмотра 1000 номеров замучаешся скролить страницу
хотелось бы вывести это так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
num date         num date
---- -----        ---- -----
 001    01 . 02 . 09    011    01 . 02 . 09 
 002    01 . 02 . 09    012    01 . 02 . 09 
 003    01 . 02 . 09    013    01 . 02 . 09 
 004    01 . 02 . 09    014    01 . 02 . 09 
 005    01 . 02 . 09    015    01 . 02 . 09 
 006    01 . 02 . 09    016    01 . 02 . 09 
 007    01 . 02 . 09    017    01 . 02 . 09 
 008    01 . 02 . 09    018    01 . 02 . 09 
 009    01 . 02 . 09    019    01 . 02 . 09 
 010    01 . 02 . 09    020    01 . 02 . 09 
к примеру на странице 10 колонок по 10 записей
искал везде по xslt читал мануал но чет ни чего не нашел
____________________________
наша служба и опасна и трудна
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36004310
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы XML не привели, поэтому XML будет такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<Items>
  <item>
    <num> 1 </num>
    <date> 01 . 02 . 09 </date>
  </item>
  ..............
  <item>
    <num> 1000 </num>
    <date> 01 . 02 . 09 </date>
  </item>
</Items>
соответственно XSL к нему
Код: 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.
  <xsl:template match="Items">
    <table border="1">
      <xsl:call-template name="showRow"/>
    </table>
  </xsl:template>

  <xsl:template match="item">
    <xsl:apply-templates select="*"/>
  </xsl:template>

  <xsl:template match="*">
    <td>
      <xsl:value-of select="."/>
    </td>
  </xsl:template>

  <xsl:template name="showRow">
    <xsl:param name="idx" select="1"/>
    <xsl:variable name="numRow" select="10"/>  <!-- количество строк в столбце -->
    <tr>
      <xsl:apply-templates select="item[position() mod $numRow = $idx]"/>
    </tr>
    <xsl:if test="$idx != 0">
      <xsl:call-template name="showRow">
        <xsl:with-param name="idx" select="($idx + 1) mod $numRow"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

С уважением, Vasilisk
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36006061
prog_dog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
спасибо большое! это как раз то что нужно xml не приводил потому что просить готового кода не хватило наглости, да не зачем, если подскажут добрые люди принцип работы так сказать алгоритм в общих чертах это уже шаг к успеху, еще раз похвалю этот форум, альтруизм это второе имя его учатников еще раз спасибо _Vasilisk_ совсем не в лом пораспинаться и добавить плюс к вашему самолюбию за отличный совет
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
вывод данных в таблице в несколько колонок
    #36725724
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал прикрутить к своей задаче (дрозофилка):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="templates/Demand.xsl"?>
<Demand>
  <Id> 341 </Id>
  <Components>
    <row ID="201" DEMAND_ID="341" COMPONENT_ID="1" COMPONENT_NAME="Component# 1" />
    <row DEMAND_ID="341" COMPONENT_ID="2" COMPONENT_NAME="Component# 2" />
    <row ID="282" DEMAND_ID="341" COMPONENT_ID="3" COMPONENT_NAME="Component# 3" />
  </Components>
</Demand>
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" />
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
		<title>N<xsl:value-of select="Demand/Id" /></title>
		<style type="text/css">
		</style>
	</head>
	<body>
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td>N <xsl:value-of select="Demand/Id" /></td>
			</tr>
			<tr>
				<td>
					<xsl:template match="Demand/Components">
						<table border="1">
							<xsl:call-template name="showRow"/>
						</table>
					</xsl:template>
				</td>
			</tr>
		</table>
	</body>
</html>
</xsl:template>

<xsl:template match="row">
	<xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="*">
	<td>
		<xsl:value-of select="."/>
	</td>
</xsl:template>

<xsl:template name="showRow">
	<xsl:param name="idx" select="1"/>
	<xsl:variable name="numRow" select="10"/>  <!-- количество строк в столбце -->
	<tr>
		<xsl:apply-templates select="row[position() mod $numRow = $idx]"/>
	</tr>
	<xsl:if test="$idx != 0">
		<xsl:call-template name="showRow">
			<xsl:with-param name="idx" select="($idx + 1) mod $numRow"/>
		</xsl:call-template>
	</xsl:if>
</xsl:template>

</xsl:stylesheet>
FF 3.6.6
Error loading stylesheet: Parsing an XSLT stylesheet failed.
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36725732
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. M$ IE ver. 7.0.5730.13
Keyword xsl:template may not be used here.
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36725743
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.P.S. Error Console
Source Code:
<xsl:template match="Demand/Components">

А как же тогда указать, что нужно цикл гонять только по Demand/Components?
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36726653
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftА как же тогда указать, что нужно цикл гонять только по Demand/Components?
<xsl:for-each>, <xsl:apply-templates>
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36726750
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
<xsl:for-each>, <xsl:apply-templates>

THNX
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36733285
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, но что-то совсем ничего не получается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Items>
  <item>
    <num> 1 </num>
    <date> 01 . 02 . 09 </date>
  </item>
  ..............
  <item>
    <num> 1000 </num>
    <date> 01 . 02 . 09 </date>
  </item>
</Items>
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" />
<xsl:template match="/">
	<html>
		<head>
			<title>Data III</title>
		</head>
		<body>
			<table border="1">
				<tr>
					<td>TD</td>
					<td>
						<table border="1">
							<xsl:for-each select="Items/item">
								<xsl:call-template name="showRow"/>
							</xsl:for-each>
						</table>
					</td>
				</tr>
			</table>
		</body>
	</html>
</xsl:template>

<xsl:template match="item">
	<xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="*">
	<td>
		<xsl:value-of select="."/>
	</td>
</xsl:template>

<xsl:template name="showRow">
	<xsl:param name="idx" select="1"/>
	<xsl:variable name="numRow" select="10"/>  <!-- количество строк в столбце -->
	<tr>
		<xsl:apply-templates select="item[position() mod $numRow = $idx]"/>
	</tr>
	<xsl:if test="$idx != 0">
		<xsl:call-template name="showRow">
			<xsl:with-param name="idx" select="($idx + 1) mod $numRow"/>
		</xsl:call-template>
	</xsl:if>
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36735366
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/me думает: да, уж... Ото меня тыркнуло такую ахинею нагородить... Начал с нуля. И вот что получилось:
Код: 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.
33.
34.
35.
36.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" />
<xsl:template match="/">
	<html>
		<head>
			<title>Data III</title>
		</head>
		<body>
			<table border="1">
				<tr>
					<td>TD</td>
					<td>
						<table border="1">
							<xsl:for-each select="Items/item[position() < 11]">
								<xsl:apply-templates select="." />
							</xsl:for-each>
						</table>
					</td>
				</tr>
			</table>
		</body>
	</html>
</xsl:template>

<xsl:template match="item">
<xsl:variable name="i" select="position()" /> 
	<tr>
		<td><xsl:value-of select="num" /></td>
		<td><xsl:value-of select="date" /></td>
		<td><xsl:value-of select="../item[$i + 10]/num" /></td>
		<td><xsl:value-of select="../item[$i + 10]/date" /></td>
	</tr>
</xsl:template>

</xsl:stylesheet>
Выводит в первую колонку, то, что нужно, а, вот, во второй: постоянно 11-й элемент. position() все время == 1. На 'google' л и попробовал еще так:
Код: 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.
33.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" />
<xsl:template match="/">
	<html>
		<head>
			<title>Data III</title>
		</head>
		<body>
			<table border="1">
				<tr>
					<td>TD</td>
					<td>
						<table border="1">
							<xsl:for-each select="Items/item[position() < 11]">
								<xsl:apply-templates select=".|following-sibling::item[position() + 10]" />
							</xsl:for-each>
						</table>
					</td>
				</tr>
			</table>
		</body>
	</html>
</xsl:template>

<xsl:template match="item">
	<tr>
		<td><xsl:value-of select="num" /></td>
		<td><xsl:value-of select="date" /></td>
	</tr>
</xsl:template>

</xsl:stylesheet>
выводится только первый столбец... Совсем чуток осталось - как второй столбец подцепить?
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36735420
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, не знаю насколько это ректально, но сие:
Код: 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.
33.
34.
35.
36.
37.
38.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" />
<xsl:template match="/">
	<html>
		<head>
			<title>Data III</title>
		</head>
		<body>
			<table border="1">
				<tr>
					<td>TD</td>
					<td>
						<table border="1">
							<xsl:for-each select="Items/item[position() < 11]">
								<xsl:apply-templates select=".">
									<xsl:with-param name="P" select="position()" />
								</xsl:apply-templates>
							</xsl:for-each>
						</table>
					</td>
				</tr>
			</table>
		</body>
	</html>
</xsl:template>

<xsl:template match="item">
	<xsl:param name="P"/>
	<tr>
		<td><xsl:value-of select="num" /></td>
		<td><xsl:value-of select="date" /></td>
		<td><xsl:value-of select="../item[$P + 10]/num" /></td>
		<td><xsl:value-of select="../item[$P + 10]/date" /></td>
	</tr>
</xsl:template>

</xsl:stylesheet>
меня удовлетворило...
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36739246
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,

мне лень писать рекурсию, засирает стек, долго работает, есть старый хак:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<TABLE>
<TR>
<TD VALIGN="top">
<xsl:for-each select="*">

<xsl:value-of select="any" />

<xsl:if test="position() mod 10">
<xsl:text disable-output-escaping="true">
<![CDATA[</TD><TD VALIGN="top">]]>
</xsl:text>
</xsl:if>

</xsl:for-each>
</TD>
</TR>
</TABLE>
Возможно не эстетично, но легко писать и главное легко поддерживать.
...
Рейтинг: 0 / 0
вывод данных в таблице в несколько колонок
    #36739248
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
position() mod  10  =  0 
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод данных в таблице в несколько колонок
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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