Повторите строку таблицы HTML с уникальными данными N раз, используя XSLT
Меня бросили в проект, который использует XSLT 1.0 для запроса базы данных, а затем одним махом преобразует запрашиваемые данные XML в HTML. Это первый раз, когда я познакомился с XSLT.
Моя цель - получить список комнат и выяснить, кто в данный момент находится в каждой комнате. Мне нужно использовать два разных запроса, один для получения номеров, а другой для получения списка людей, которые в данный момент находятся в комнате. Второй запрос также извлекает данные из таблицы соединений в комнате людей. XML выходит так:
<DATASETLIST>
<DATASET entity=”ROOM” >
<ROW>
<ROOM_ID>
<ROOM_Name>
<ROOM_Occupancy>
<ROOM_OccupantCount>
</ROW>
<DATASET entity= “BOOKING;PERSON”>
<ROW>
<BOOKING_ID>
<BOOKING_PERSON_ID>
<BOOKING_ROOM_ID>
<DATASET entity=”PERSON”>
<ROW>
…. PERSON INFO
</ROW>
</DATASET>
</ROW>
</DATASET>
</DATASETLIST>
В каждом номере есть буква и номер. Например, А1, А2, В1, В2 и т. Д. Одним из требований является их группировка по буквам, что я и сделал с помощью мюнхенской группировки.
Затем я перебрал список комнат для каждой группы. Итак, я создаю таблицу HTML каждой комнаты и ее соответствующего обитателя.
BLOCK A
Room # Person Misc Person Info
A1 Smith, Joe blah, blah
Я использую следующий код, чтобы сопоставить человека с комнатой:
<table>
<xsl:for-each select=”$blocks” > (variable holds the grouping results)
<tr>
<td>
<xsl:value-of select=”ROOM_ID” />
</td>
<xsl:for-each select=”//*[BOOKING__ROOM_ID = current()/ROOM__Id]” >
<td>
<xsl:value-of select="current()/DATASET/ROW/PERSON_Name" />
</td>
<td>
<xsl:value-of select="current()/DATASET/ROW/PERSON_Info" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
Это работает, но проблема у меня в том, что в некоторых комнатах может быть несколько человек. Таким образом, данные таблицы помещают двух человек в одну строку и портят формат таблицы. Я попытался вызвать шаблон рекурсивно, чтобы создать строку для каждого слота занятости в комнате, однако это также сделало копию людей.
Все это запускается и отображается в программе продавца. Запрос SQL является проприетарным диалектом SQL-92, поэтому данные должны запрашиваться определенным образом, а результаты XML являются неизменяемыми (насколько я могу собрать). Используя XSLT, как я могу перечислить каждую комнату и, если в комнате более одного человека, перечислить эту комнату N раз с информацией каждого уникального человека?