Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / [xls] изменить значение переменной / 12 сообщений из 12, страница 1 из 1
14.02.2012, 17:01
    #37661467
abra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
Код: 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
14.02.2012, 17:15
    #37661508
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
abra,

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

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

За много лет написания разных шаблонов, мне ни разу не помешало это ограничение.
...
Рейтинг: 0 / 0
14.02.2012, 18:59
    #37661718
abra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
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
15.02.2012, 14:48
    #37663068
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
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
16.02.2012, 12:18
    #37664851
abra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
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
16.02.2012, 12:19
    #37664855
abra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
mage.lan,

опечатка не xls, а xsl
...
Рейтинг: 0 / 0
16.02.2012, 13:23
    #37665058
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
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
17.02.2012, 17:11
    #37667613
abra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
mage.lan,

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

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


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


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

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

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

Спасибо за ответы. очень помогли.
...
Рейтинг: 0 / 0
10.01.2013, 20:16
    #38105529
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[xls] изменить значение переменной
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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / [xls] изменить значение переменной / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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