powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xslt преобразование
2 сообщений из 2, страница 1 из 1
xslt преобразование
    #37041207
xml-pupil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой xml файл. Нужно его отформатировать таким образом, чтобы все элементы <block> у которых в элементе <area> атрибут street одинаковый объединялись в новый общий блок и у этого блока добавлялся атрибут name со значением общей улицы.

Код: 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.
<source>
<block>
   <market name="Market1" number="15"/>
   <time open="10:00" close="23:00"/>
   <area street="15th St"/>
</block>
<block>
   <market name="Market2" number="36"/>
   <time open="10:00" close="22:00"/>
   <area street="7th St"/>
</block>
<block>
   <market name="Market3" number="11"/>
   <time open="9:00" close="22:00"/>
   <area street="7th St"/>
</block>
<block>
   <market name="Market4" number="28"/>
   <time open="9:00" close="23:00"/>
   <area street="24th St"/>
</block>
<block>
   .....
</block>
</source>

То есть должно получиться что-то типа этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<source>
   <top-block name="7th St">
      <block>
         <market name="Market2" number="36"/>
         <time open="10:00" close="22:00"/>
         <area street="7th St"/>
      </block>
      <block>
         <market name="Market3" number="11"/>
         <time open="9:00" close="22:00"/>
         <area street="7th St"/>
      </block>
   </top-block>
   <top-block name="15th St">
      <block>
         ............
      </block>
      <block>
         ............
      </block>
   </top-block>
</source>

Объясните пожалуйста как это реализовать.
...
Рейтинг: 0 / 0
xslt преобразование
    #37041636
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<!-- -->
	<xsl:key match="/source/block/area" name="key_area" use="@street"/>
	<!-- -->
	<xsl:template match="/">
		<xsl:apply-templates select="source"/>
	</xsl:template>
	<!-- -->
	<xsl:template match="source">
		<xsl:copy>
			<xsl:for-each select="block/area[generate-id()=generate-id(key('key_area',@street))]">
				<xsl:variable name="curStreet" select="@street"/>
				<top-block name="{@street}">
					<xsl:apply-templates select="/source/block[area/@street=$curStreet]"/>
				</top-block>
			</xsl:for-each>
		</xsl:copy>
	</xsl:template>
	<!-- -->
	<xsl:template match="block">
		<xsl:copy-of select="."/>
	</xsl:template>
	<!-- -->
	<xsl:template match="@*">
		<xsl:copy-of select="."/>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xslt преобразование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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