powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / [xls] изменить значение переменной
12 сообщений из 12, страница 1 из 1
[xls] изменить значение переменной
    #37661467
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
<xsl:variable name="old_id"  >-1
</xsl:variable> 

<xsl:variable name="old_id"  >5
</xsl:variable> 



Мне пишет что 2 раза объявлять old_id нельзя в одном шаблоне.
А как поменять значение параметра в одном шаблоне
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37661508
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abra,

xsl в этом похож на фунциональные языки с читстым синтаксисом.
переопределить переменную нельзя .

Вы задачу расскажите свою, мы вам поможем ее решить.

За много лет написания разных шаблонов, мне ни разу не помешало это ограничение.
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37661718
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

Задача
Есть xml в нем SQL запрос выдает
id name left top1 Иванов 20 101 Петров 20102 Сидоров 10010

Нужно из этого xml используя xsl отобразить

nameИвановПетров
nameСидоров

Я хотел анализировать номер и если он изменился, то рисовать таблицу.
Но вот сохранить old_id=id чет не получаеться.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
.........
<xsl:variable name="old_id"  >-1
</xsl:variable> 
<xsl:for-each select="RecordSet/Record">
    <xsl:variable name="new_id"  >
	        <xsl:value-of select="ID"/>
    </xsl:variable>	
	       <xsl:if test="$new_id > $old_id"  >		    
	             <xsl:variable name="old_id"  >$new_id
                        </xsl:variable>       
               </xsl:if>
..........
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37663068
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abra,
т.к. вы xml не привели я сделал свой. с той лишь разницей, что id у меня названо group, т.к. id повторятся не может по идейным соображениям.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0"?>
<root>
	<item group="1">
		<name>Иванов</name>
		<left>20</left>
		<top>10</top>
	</item>
	<item group="1">
		<name>Петров</name>
		<left>20</left>
		<top>10</top>
	</item>
	<item group="2">
		<name>Сидоров</name>
		<left>20</left>
		<top>10</top>
	</item>
</root>


xsl выглядит так, переменных в нем нет вообще. группировка осуществляется посредством механизма ключей.
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:key name="group" match="/root/item" use="@group" />
	<xsl:output method="html" />

	<xsl:template match="/">
		<xsl:for-each select="/root/item[ generate-id() = generate-id( key( 'group', @group ))]">
			<table border="1">
				<thead>
					<tr>
						<th>
							name
						</th>
					</tr>
				</thead>
				<tbody>
					<xsl:for-each select="key( 'group', current()/@group )">
						<tr>
							<td>
								<xsl:value-of select="name" />
							</td>
						</tr>
					</xsl:for-each>
				</tbody>
			</table>
			

		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37664851
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

Создал тестовый sql и упращенную вид шаблона.
Все работает только надо, что бы не на каждого человека создавалась таблица,
а что бы иванов и петров был в одной таблице, а сидоров в другой
xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Monitor>
        <Forms>  
                <Form left="5" top="5" Width="600" Height="600" Caption="Этажный план" ID="1" BorderStyle="2" WindowState="0">
                        <ZOrder>-1</ZOrder>
                        <ShowPanel>0</ShowPanel>
                        <Periodicity>2</Periodicity>
                        <SQLText>
select   r.id, rp.atop,rp.awidth,rp.aheight,g.name from guests as g
left join rooms r on r.id=g.room
left join room_pardm  rp on r.id=rp.idd
where g.date='16.02.2012'

                        </SQLText>
                        <XSLT>floorplan.xsl</XSLT>
                        <HTML>cache\floorplan.html</HTML>
                        <HIDECURSOR>0</HIDECURSOR>
                        <FormID>1</FormID>
                </Form>               

        </Forms>
</Monitor>


xls:
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://user.com/namespace"
  version="2.0"
>
<xsl:template match="/">

<header>
  <META http-equiv="Content-Type" CONTENT="text/html; charset=WINDOWS-1251" />
</header>

<body style="background-image:url(floorplan.gif);">

<xsl:for-each select="RecordSet/Record">
      <div >
       <xsl:attribute name="ID">
           <xsl:value-of select="ID"/>
        </xsl:attribute> 
	   	
		
        <xsl:attribute name="STYLE">
            position:absolute; 
            top:<xsl:value-of select="ATOP"/>;
            left:<xsl:value-of select="ALEFT"/>;
            width:<xsl:value-of select="AWIDTH"/>;
            height:<xsl:value-of select="AHEIGHT"/>;
            overflow:hidden;
        </xsl:attribute>
        
           <table border="1" width="100%" height="100%" >				
                <tr height="10px">
                    <td align="center">
                            <xsl:value-of select="ID"/>
		</td>
                </tr>
	     <tr>
                    <td >
                            <xsl:value-of select="name"/>         
                    </td>
               </tr>
			</table>	
	
		
		
  </div>
</xsl:for-each>
</body>
</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37664855
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

опечатка не xls, а xsl
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37665058
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abra,

то что вы написали, это опять не XML (у меня вашей базы с данными нет), я так понимаю вы результирующий, после запроса достать не можете...
теперь, что касается XSL, пробуем так:

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://user.com/namespace"
  version="2.0"
>
<xsl:key name="group" match="/RecordSet/Record" use="ID" />
<!--Ключ, должен иметь полный путь от корня (переменные использовать нельзя) и поле, по которому нужна уникальность -->
<xsl:template match="/">

<header>
  <META http-equiv="Content-Type" CONTENT="text/html; charset=WINDOWS-1251" />
</header>

<body style="background-image:url(floorplan.gif);">

<xsl:for-each select="/RecordSet/Record[ generate-id() = generate-id( key( 'group', ID ))]">
<!-- В этом цикле мы обходим только уникальные ID, отсекая все остальные при помощи ключа -->
      <div ID="{ID}" STYLE="position:absolute; top: {ATOP}px; left: {ALEFT}px; width: {AWIDTH}px; height: {AHEIGHT}px; overflow:hidden;">
		
           <table border="1" width="100%" height="100%" >				
                <tr height="10px">
                    <td align="center">
                        <xsl:value-of select="ID"/>
		    </td>
                </tr>
                <xsl:for-each select="key( 'group', current()/ID )">
                <!-- В этом цикле мы обходим только Record для ID из прошлого цикла, т.е. строим строки таблицы -->
	            <tr>
                        <td >
                            <xsl:value-of select="name"/>         
                        </td>
                    </tr>
                </xsl:for-each>
	   </table>	
     </div>
</xsl:for-each>
</body>
</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37667613
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

Спасибо большое. пример очень помог в решении общей задачи!!!
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37667806
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abra,

А почему
Код: xml
1.
<body style="background-image:url(floorplan.gif);">


Не срабатывает.
Код: xml
1.
<body style="background-color: #FFCC66;">


Срабатывает.

картинка находиться в папке исполняемых файлов
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37668222
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abra,

Не срабатывает, т. к. картинка лежит не там откуда ее спрашивают.
Вы ведь через сервер к странице обращаетесь? Попробуйте указать картинке полный путь
Код: css
1.
background: #ffcc66 url('/images/floorplan.gif');
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #37670046
abra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все поправил. Оказывается в другой папке файл должен был лежать.

Спасибо за ответы. очень помогли.
...
Рейтинг: 0 / 0
[xls] изменить значение переменной
    #38105529
dasistgut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan, если не займёт много времени, подскажите, пожалуйста - как преобразование сделать. Не могу придумать никак.
из:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<row>
  <cell> name_1 </cell>
  <cell> name_2 </cell>
</row>
<row>
  <cell> data_11 </cell>
  <cell> data_12 </cell>
</row>
<row>
  <cell> data_21 </cell>
  <cell> data_22 </cell>
</row>
.
.
.

надо сделать:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<row>
  <name_1> data_11 </name_1>
  <name_2> data_12 </name_2> 
</row>
<row>
  <name_1> data_21 </name_1> 
  <name_2> data_22 </name_2> 
</row>
.
.
.


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


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