Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Схема XSLT для HTML / 4 сообщений из 4, страница 1 из 1
14.05.2010, 19:43
    #36629318
Yat
Yat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема XSLT для HTML
Помогите сделать схему XSLT. Думаю, что для специалистов это не трудно, а мне надо не один день потратить на изучения.
Есть такой XML для данных, полученных из БД.

<XmlProtocol>
<Table>
<issue>Раздел_1</issue>
<name>пункт_1</name>
<num>99</num>
<weight>20</weight>
</Table>
<Table>
<issue>Раздел_1</issue>
<name>пункт_2</name>
<num>100</num>
<weight>20</weight>
</Table>
<Table>
<issue>Раздел_1</issue>
<name>пункт_3</name>
<num>101</num>
<weight>20</weight>
<svalue>значение_пункта</svalue>
</Table>
.............
</Table>
</XmlProtocol>

Нужен HTML следующего вида:

1. Раздел_1
пункт_1
пункт_2
пункт_3 значение_пункта
2. Раздел_2
пункт_1 значение_пункта
пункт_2 значение_пункта
пункт_3 значение_пункта
......

Обратите внимание, что тэг <svalue> присутствует только когда для этого пункта есть значение. В других случаях значение должно отсутствовать. Нумерация разделов должна быть только для первого встречающегося уникального <issue>. Элементы <table> упорядочены в xml в том порядке, в котором должны быть в HTML.
...
Рейтинг: 0 / 0
24.05.2010, 11:43
    #36644830
Yat
Yat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема XSLT для HTML
Я понимаю, что никто за меня делать не будет. Подскажите что не так со схемой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?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>
      <body>
        <xsl:variable name="Issues" select="//Table[not(issue=following::issue)]" />
        <xsl:for-each select="$Issues">
          <xsl:number value="position()" format="1) "/>
          <xsl:value-of select="./issue"/>
          <xsl:text> </xsl:text>
          <xsl:for-each select="./..//Table[issue=$Issues]">
              <xsl:value-of select="./name"/>
              <xsl:text> </xsl:text>
              <xsl:if test="./svalue">
                <xsl:value-of select="./svalue"/><xsl:text> </xsl:text>
              </xsl:if>
          </xsl:for-each>
        </xsl:for-each>
      </body>
    </html>
</xsl:template>
</xsl:stylesheet> 

В качестве вывода получаю только номера и названия уникальных разделов. Т.е.

Код: plaintext
1.
<html><body> 1 ) Раздел_1  2 ) Раздел_2  3 ) Раздел_3 </body></html>

Почему не работает внутренний цикл?
...
Рейтинг: 0 / 0
25.05.2010, 11:29
    #36646977
Pasionario
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема XSLT для HTML
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
    <xsl:output method="xml" indent="yes"/>
	<xsl:key name="k" match="Table" use="issue"/>
 
    <xsl:template match="XmlProtocol">
		<html>
			<body>
				<xsl:apply-templates select="Table[generate-id(.) = generate-id(key('k', issue))]"/>
			</body>
		</html>	

    </xsl:template>
 
	<xsl:template match="Table">
		<p>
			<b><xsl:value-of select="issue"/></b>
		</p>
		<xsl:apply-templates select="key('k', issue)" mode="x"/>
	</xsl:template>
	
	<xsl:template match="Table" mode="x">
		<p>
			<xsl:value-of select="name"/>
			<xsl:if test="svalue">
				<p>
					<xsl:value-of select="svalue"/>
				</p>
			</xsl:if>
		</p>
	</xsl:template>
	
</xsl:stylesheet>

...
Рейтинг: 0 / 0
25.05.2010, 11:47
    #36647063
Yat
Yat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема XSLT для HTML
Спасибо! Отлично работает
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Схема XSLT для HTML / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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