Как создать новую таблицу после достижения высоты в xsl?

#html #css #xml #xslt

#HTML #css #xml #xslt

Вопрос:

У меня есть XML-файл, подобный:

 <lines>
   <line>
       <id>1</id>
       <value>1</value> 
   </line>
   <line>
       <id>2</id>
       <value>2</value> 
   </line>
   <line>
       <id>3</id>
       <value>3</value> 
   </line>
   <line>
       <id>4</id>
       <value>4</value> 
   </line>
   <line>
       <id>5</id>
       <value>5</value> 
   </line>
   <line>
       <id>6</id>
       <value>6</value> 
   </line>
   <line>
       <id>7</id>
       <value>7</value> 
   </line>
   <line>
       <id>8</id>
       <value>8</value> 
   </line>
<lines>
  

и мой файл xslt:

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
  <table border="1">
    <xsl:for-each select="lines/line">
    <tr>
       <td><xsl:value-of select="id"/></td>
       <td><xsl:value-of select="value"/></td>
   </tr>
  </xsl:for-each>
</table>
</body>
</html>
</xsl:template>
  

Мой вопрос в том, как я могу разделить эти xml-узлы из-за высоты таблицы?
Например, после того, как таблица достигнет 100 пикселей, затем закройте тег таблицы и создайте новую таблицу и добавьте тег tr к этой новой таблице?

Как я могу добиться этого? Я пытался подсчитать количество строк, но иногда текст в xml может быть очень большим. Итак, я хочу уменьшить количество строк в таблице.

Любая помощь?

Комментарии:

1. Как вы хотите измерить высоту таблиц? После того, как она будет отображена браузером? Если состояние css-инструкции: tr {height:25px;}, вы должны выйти после 4 строк? Моей единственной идеей было бы преобразование в javascript и измерение после добавления строки за строкой. Но совершенно неэффективно.

Ответ №1:

Общим решением такого рода требований является написание рекурсивного шаблона, который принимает в качестве параметров (а) «достигнутую на данный момент высоту» и (б) «максимальную высоту». Шаблон должен обработать одну строку, затем проверить, достигнута ли максимальная высота; если это так, он должен вернуться, в противном случае он должен вызвать себя для обработки следующей строки, передавая новое значение для параметра «высота, достигнутая на данный момент».

(Вы можете уменьшить его до одного параметра, если вы отсчитываете до нуля, а не до некоторого предела.)