powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Схема XSLT для HTML
4 сообщений из 4, страница 1 из 1
Схема XSLT для HTML
    #36629318
Yat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yat
Гость
Помогите сделать схему 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
Схема XSLT для HTML
    #36644830
Yat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yat
Гость
Я понимаю, что никто за меня делать не будет. Подскажите что не так со схемой:
Код: 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
Схема XSLT для HTML
    #36646977
Pasionario
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Схема XSLT для HTML
    #36647063
Yat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yat
Гость
Спасибо! Отлично работает
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Схема XSLT для HTML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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