Я пытаюсь создать список телефонов HTML с возможностью печати в две колонки из файла XML организационных групп, в котором есть связанный персонал
<group print_order=1>
<group_name><![CDATA[Human Resources]]></group_name>
<person>...(name, address, phone data)...</person>
<person> ... </person>
<person> ... </person>
</group>
<group print_order=2>
<group_name><![CDATA[Operations]]></group_name>
<person> ... </person>
<person> ... </person>
<person> ... </person>
<person> ... </person>
</group>
<group print_order=3>
<group_name><![CDATA[IT Services]]></group_name>
и т.д.
Я пытаюсь перейти к следующему выводу HTML
<table>
<tr>
<td>
<div class=group>Human Resources
<person>
<span class=name> lastname, firstname </span>
<span class=addr> room# building </span>
<span class=phone> 555-5555 </span>
</person>
(repeated for each person in group)
</div>
<div class=group>Operations
<person>
<span class=name> lastname, firstname </span>
<span class=addr> room# building </span>
<span class=phone> 555-5555 </span>
</person>
</div>
</td>
<td>
<div class=group>IT Services
<person>
<span class=name> lastname, firstname </span>
<span class=addr> room# building </span>
<span class=phone> 555-5555 </span>
</person>
(repeated for each person in group)
</div>
etc.
</td>
</tr>
</table>
<p class=page_break>
<table> (next table on next page)
<tr>
<td> (next set of groups with people)
</td>
<td> ( next set of groups with people )
</td>
</tr>
</table>
(Repeat tables as needed until all groups output)
Проблема в том, что я хочу, чтобы количество строк в ячейке таблицы было меньше или равно количеству строк на печатной странице, и я не хочу, чтобы группы разбивались по элементам таблицы.
Я пробовал инструкцию xsl: for-each-group, но не могу понять, как должен выглядеть код group-by или соседний с группой код. Я также попробовал следующий ужасный тест:
<xsl:if test="sum($nodes/group[following-sibling::group[preceding-sibling::group[1] is current()]]/@line_count) mod 40 > sum($nodes/group[following-sibling::group[preceding-sibling::group[2] is current()]]/@line_count) mod 40 ">
в цикле for-each
, где node - это переменная, содержащая последовательность групп, line_count - количество строк на группу, а 40 - количество строк на страницу. Я использую таблицы HTML для максимальной поддержки браузера.
Есть ли лучший способ сделать это? Может быть, с помощью CSS? Ларри Уолл, автор языка Perl, сказал, что в языке программирования простые вещи должны быть простыми, а сложные должны быть возможными. Что я после возможного в XSLT / XPath? Спасибо всем, кто хочет пройти через все это.