powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: узнать position() родительского элемента
2 сообщений из 2, страница 1 из 1
XSLT: узнать position() родительского элемента
    #36060568
BPK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xml" href="listxml.xsl" ?>
<list>
	<category>
		<id> 11 </id>
		<name>Demo Reels</name>
		<hidden> 0 </hidden>
		<song>
			<name>Music Demo  2008 </name>
			<id> 554 </id>
			<description>Showcasing Frank's wide variety of music composition styles.</description>
			<project>Frank Klepacki</project>
		</song>
	</category>
	<category>
		<id> 12 </id>
		<name>~hidden</name>
		<hidden> 1 </hidden>
	</category>
</list>

Есть XSL:
Код: 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.
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
				<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
				<title>List</title>
				<style type="text/css">
					table {border-collapse:collapse; border:solid 1px black}
					td, th {border:solid 1px black; height:20px; background-color:white; padding-left:5px; padding-right:5px; vertical-align:top}
					tr.alt td {background-color:gainsboro}
				</style>
			</head>
			<body>
				<table>
					<tr>
						<th>Category</th>
						<th>Project</th>
						<th>Name</th>
						<th>Description</th>
					</tr>
					<xsl:for-each select="/list/category[hidden=0]">
						<xsl:sort data-type="text" select="name"/>
						<xsl:sort data-type="text" select="project"/>
						<xsl:apply-templates select="song" />
					</xsl:for-each>
				</table>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="song">
		<tr xmlns="http://www.w3.org/1999/xhtml">
			<xsl:if test="(position() mod 2 = 1)">
				<xsl:attribute name="class">alt</xsl:attribute>
			</xsl:if>
			<td><xsl:value-of select="../name" /></td>
			<td><xsl:value-of select="project" /></td>
			<td><xsl:value-of select="name" /></td>
			<td><xsl:value-of select="description" /></td>
		</tr>
	</xsl:template>
</xsl:stylesheet>

Нужно сделать так, чтобы в зависимости от position() элемента category к HTML-тегу применялся или не применялся CSS-класс "alt". Как сделать?
...
Рейтинг: 0 / 0
XSLT: узнать position() родительского элемента
    #36060751
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:for-each select="/list/category[hidden=0]">
  <xsl:sort data-type="text" select="name"/>
  <xsl:sort data-type="text" select="project"/>
  <xsl:apply-templates select="song">
    <xsl:with-param name="pos" select="position()"/>
  </xsl:apply-templates>
</xsl:for-each>

<xsl:template match="song">
  <xsl:param name="pos"
  <tr xmlns="http://www.w3.org/1999/xhtml">
    <xsl:if test="($pos mod 2 = 1)">
      <xsl:attribute name="class">alt</xsl:attribute>
    </xsl:if>
    <td><xsl:value-of select="../name" /></td>
    ..................
  </tr>
</xsl:template>
Только учтите, что позиция будет не по всему множеству category, а по множеству category[hidden=0]. Для всего множества нужно еще один финт ушами делать
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT: узнать position() родительского элемента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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