Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод данных в таблице в несколько колонок / 13 сообщений из 13, страница 1 из 1
24.05.2009, 07:24
    #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
24.05.2009, 22:40
    #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
25.05.2009, 16:55
    #36006061
prog_dog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод данных в таблице в несколько колонок
_Vasilisk_,
спасибо большое! это как раз то что нужно xml не приводил потому что просить готового кода не хватило наглости, да не зачем, если подскажут добрые люди принцип работы так сказать алгоритм в общих чертах это уже шаг к успеху, еще раз похвалю этот форум, альтруизм это второе имя его учатников еще раз спасибо _Vasilisk_ совсем не в лом пораспинаться и добавить плюс к вашему самолюбию за отличный совет
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.07.2010, 14:43
    #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
06.07.2010, 14:45
    #36725732
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод данных в таблице в несколько колонок
P.S. M$ IE ver. 7.0.5730.13
Keyword xsl:template may not be used here.
...
Рейтинг: 0 / 0
06.07.2010, 14:47
    #36725743
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод данных в таблице в несколько колонок
P.P.S. Error Console
Source Code:
<xsl:template match="Demand/Components">

А как же тогда указать, что нужно цикл гонять только по Demand/Components?
...
Рейтинг: 0 / 0
06.07.2010, 21:23
    #36726653
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод данных в таблице в несколько колонок
Ex_SoftА как же тогда указать, что нужно цикл гонять только по Demand/Components?
<xsl:for-each>, <xsl:apply-templates>
...
Рейтинг: 0 / 0
06.07.2010, 22:43
    #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
09.07.2010, 17:55
    #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
12.07.2010, 11:21
    #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
12.07.2010, 11:44
    #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
13.07.2010, 18:53
    #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
13.07.2010, 18:54
    #36739248
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод данных в таблице в несколько колонок
Код: plaintext
position() mod  10  =  0 
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / вывод данных в таблице в несколько колонок / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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