Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите посчитать количество / 3 сообщений из 3, страница 1 из 1
23.02.2011, 22:57
    #37132738
Gambit_d.s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите посчитать количество
Есть такой xml документ:

Код: 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.
<?xml version="1.0" standalone="no" ?>

<?xml-stylesheet type="text/xsl" href="task2.xsl"?>

<Model>
<Vipusk year="1992-1993">
	<Kuzov namber="CD9A">
	</Kuzov>
</Vipusk>
<Vipusk year="1994-1995">
	<Kuzov namber="CE9A" analog="CD9A">
	</Kuzov>
</Vipusk>
<Vipusk year="1995-1996">
	<Kuzov namber="CE9A" analog="CD9A">
	</Kuzov>
</Vipusk>
<Vipusk year="1996-1997">
	<Kuzov namber="CN9A" analog="CE9A">
	</Kuzov>
</Vipusk>
<Vipusk year="1997-1999">
	<Kuzov namber="CP9A" analog="CN9A">
	</Kuzov>
</Vipusk>
<Vipusk year="1999-2001">
	<Kuzov namber="CP9A" analog="CN9A">
	</Kuzov>
</Vipusk>
<Vipusk year="2002-2003">
	<Kuzov namber="CT9A" analog="CP9A">
	</Kuzov>
</Vipusk>
<Vipusk year="2003-2005">
	<Kuzov namber="CT9A" analog="CP9A">
	</Kuzov>
</Vipusk>
<Vipusk year="2005-2006">
	<Kuzov namber="CT9A" analog="CP9A">
	</Kuzov>
</Vipusk>
<Vipusk year="2007-2010">
	<Kuzov namber="CZ4A" analog="CT9A">
	</Kuzov>
</Vipusk>
</Model>

Нужно вывести в таблицу номер кузова и количество кузовов сделанных
по его подобию
Я пробовал сделать так:

Код: 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.
 
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="namber" match="//Vipusk/Kuzov" use="@namber"/>
<xsl:template match="/">                                    
<html>
<head>
 <title> Task  2  </title>
</head>
	<body>
	  <table border="2">
	        <tr bgcolor="#d8a8f0">
			<td> ID Kuzovs </td>
			<td> Count </td>
		</tr>

			<xsl:for-each select="//Vipusk/Kuzov[generate-id()=generate-id(key('namber',@namber))]"> 
		<tr>
			<td>
				<p align="center">
        				<xsl:value-of select="@namber"/>
				</p>	
		        </td>
		 	<td>
			<xsl:variable name="p_id" select="@namber"/>
			<xsl:for-each select="//Kuzov[@analog=$p_id]">
			<xsl:value-of select="count(@analog)"/>
			<xsl:text>  </xsl:text>
			</xsl:for-each>       
	 		</td>   
		</tr>
			</xsl:for-each> 
	  </table>
	</body>
</html>
</xsl:template>
</xsl:stylesheet>

Но тогда count считает количества для каждого кузова отдельно, и выводит подряд.
Помогите исправить
...
Рейтинг: 0 / 0
24.02.2011, 08:33
    #37132961
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите посчитать количество
Gambit_d.s,

Выбирай, что те подойдет . Первая строка - преобразованный твой вариант
Код: plaintext
1.
2.
3.
<xsl:value-of select="count(//Kuzov[@analog=current()/@namber])"/>
<xsl:value-of select="count(key('namber',@analog))"/>
<xsl:value-of select="count(key('namber',@namber))"/>
<xsl:value-of select="count(//Kuzov[@namber=current()/@analog])"/>

Вообще, задача толком не ясна. У CZ4A аналог CT9A; у CT9A аналог CP9A. Вопрос - является ли CP9A аналогом CZ4A... Если, ни одна строчка не подойдет, нарисуй - какой должен быть результат.
...
Рейтинг: 0 / 0
24.02.2011, 09:39
    #37133036
Gambit_d.s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите посчитать количество
refreg,

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


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