мне кажется, у вас XML неправильно сформирован, поэтому приходится XSL так же коряво выпиливать под ситуацию
не очень понял назначение аттрибута shift
хотите формировать ряды у таблицы с нужным количеством заполненные ячеек — так группируйте данные для ячеек нужным образом ещё в XML'е