Повторите строку таблицы 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 раз с информацией каждого уникального человека?

0 ответов

Другие вопросы по тегам