powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вывести записи XML, где поле равно значению
7 сообщений из 7, страница 1 из 1
Вывести записи XML, где поле равно значению
    #35310353
fghjfghj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть шаблон, сортирующий по двум столбцам. Что нужно дописать, чтобы при срабатывании ссылки <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
Вывести записи XML, где поле равно значению
    #35310358
fghjfghj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В приложении файл данных XML
...
Рейтинг: 0 / 0
Вывести записи XML, где поле равно значению
    #35310369
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Вывести записи XML, где поле равно значению
    #35310371
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, кстати шаблон 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
Вывести записи XML, где поле равно значению
    #35310420
fghjfghj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю!
...
Рейтинг: 0 / 0
Вывести записи XML, где поле равно значению
    #35310427
fghjfghj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, не хочет - при наличии двух блоков, всегды выполняется первый (сортируется по цене):
Код: 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
Вывести записи XML, где поле равно значению
    #35311984
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И абсолютно прав. XSL ищет первый блок, который удовлетворяет условию.

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

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


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