Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вывести записи XML, где поле равно значению / 7 сообщений из 7, страница 1 из 1
13.05.2008, 23:34
    #35310353
fghjfghj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
Есть шаблон, сортирующий по двум столбцам. Что нужно дописать, чтобы при срабатывании ссылки <a href="?smode=Price_eq_1"> выводились только записи с Price=1 ? Заранее спасибо и прощу прощения за глупость вопроса...
Код: 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.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xsl:stylesheet version="1.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" encoding="WINDOWS-1251"/> 

<xsl:param name="smode" />
<xsl:param name="ident" />

<xsl:template match="Products-list">	
	<html>
		<head>
			<title>mytable</title>
		</head>
		<body bgcolor='black'>
			<xsl:choose>			
			  <xsl:when test="not($ident)">
				<xsl:call-template name="show" />
			  </xsl:when>
			</xsl:choose>
		
		</body>
	</html>

</xsl:template> 

<xsl:template name="sorting">
	<xsl:choose>
	  <xsl:when test="contains($smode, 'Product')">
		<xsl:apply-templates>
			<xsl:sort select="Product" order="ascending" data-type="text" />
		</xsl:apply-templates>
	  </xsl:when>

	  <xsl:when test="contains($smode, 'Price')">
		<xsl:apply-templates>
			<xsl:sort select="Price" order="ascending" data-type="number" />
		</xsl:apply-templates> 
	  </xsl:when>

	  <xsl:when test="contains($smode, 'Price_eq_1')">
                   <!--   ???????????????????????????     -->
	  </xsl:when>

	  <xsl:otherwise>
		<xsl:apply-templates />
	  </xsl:otherwise>
	</xsl:choose>
</xsl:template> 
					
<xsl:template name="show">
<font color='orange' face='verdana'><h1>Прайс-лист</h1></font>

<font color='c9c9c9' face='verdana'>

	<p><a href="?smode=Price_eq_1">Отобразить товар с ценой =  1 </a></p>

	<table border='0' cellspacing="10">
		<thead>
			<tr>
				<th><a href="?smode=Product">Наименование продукта</a></th>
				<th>Код</th>
				<th><a href="?smode=Price">Цена</a></th>
				<th>Количество</th>
			</tr>
		</thead>
	
		<tbody>
			<xsl:call-template name="sorting" />
		</tbody>
	</table>

</font>
</xsl:template>

<xsl:template match="curProduct" name="srow">
	<xsl:choose>
	  <xsl:when test="not($ident)">
		<tr>
			<td><xsl:value-of select="current()/Product" /></td>
			<td><xsl:value-of select="current()/Code" /></td>
			<td><xsl:value-of select="current()/Price" /></td>
			<td><xsl:value-of select="current()/Num" /></td>	
		</tr>
	  </xsl:when>
	</xsl:choose>
</xsl:template>

</xsl:stylesheet>

...
Рейтинг: 0 / 0
13.05.2008, 23:37
    #35310358
fghjfghj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
В приложении файл данных XML
...
Рейтинг: 0 / 0
13.05.2008, 23:44
    #35310369
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
Код: plaintext
1.
2.
3.
4.
................
<xsl:when test="contains($smode, 'Price_eq_1')">
  <xsl:apply-templates select="curProduct[Price=1]"/>
</xsl:when>
.................

С уважением, Vasilisk
...
Рейтинг: 0 / 0
13.05.2008, 23:47
    #35310371
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
И, кстати шаблон curProduct рекомендую переписать. current() там лишнее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:template match="curProduct" name="srow">
	<xsl:choose>
	  <xsl:when test="not($ident)">
		<tr>
			<td><xsl:value-of select="Product" /></td>
			<td><xsl:value-of select="Code" /></td>
			<td><xsl:value-of select="Price" /></td>
			<td><xsl:value-of select="Num" /></td>	
		</tr>
	  </xsl:when>
	</xsl:choose>
</xsl:template>

С уважением, Vasilisk
...
Рейтинг: 0 / 0
14.05.2008, 00:56
    #35310420
fghjfghj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
Благодарю!
...
Рейтинг: 0 / 0
14.05.2008, 01:09
    #35310427
fghjfghj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
Нет, не хочет - при наличии двух блоков, всегды выполняется первый (сортируется по цене):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	  <xsl:when test="contains($smode, 'Price')">
		<xsl:apply-templates>
			<xsl:sort select="Price" order="ascending" data-type="number" />
		</xsl:apply-templates> 
	  </xsl:when>

	  <xsl:when test="contains($smode, 'Price_eq_1')">
		<xsl:apply-templates select="curProduct[Price=1]"/>
	  </xsl:when>
...
Рейтинг: 0 / 0
14.05.2008, 15:12
    #35311984
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести записи XML, где поле равно значению
И абсолютно прав. XSL ищет первый блок, который удовлетворяет условию.

Решений 2
1) поменять блоки местами
2) указывать неперекрывающиеся условия. Например так
Код: plaintext
<xsl:when test="contains($smode, 'Price') and not contains($smode, 'Price_eq_1')">
Первый способ быстрее, второй надежней

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


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