|
|
|
Помогите разбить выходной документ на страницы
|
|||
|---|---|---|---|
|
#18+
Есть XML вида: <data> <item id="i1" sector="s1" subsector="u1">561</item> <item id="i10" sector="s3" subsector="u4">15</item> <item id="i22" sector="s2" subsector="u2">1234</item> <item id="i11" sector="s1" subsector="u2">123</item> <item id="i17" sector="s1" subsector="u3">165</item> ... <item N> Value N </item> <sector id="s1">Sector 1</sector> ... <sector id=N>Sector N</sector> <subsector id="u1">Subsector 1</subsector> ... <subsector id=N>Subsector N</subsector> </data> Его надо представить в виде: Sector 1 Subsector 1 ID Value ---------------- id1 value1 ... idN valueN ---------------- Subsector N ID Value ---------------- id1 value1 ... idN valueN ... Sector N Subsector 1 ID Value ---------------- id1 value1 ... idN valueN ---------------- Subsector N ++++++++++++++++ ID Value ---------------- id1 value1 ... idN valueN ... Это достаточно просто решается двойной группировкой Мюнха, но есть еще условие: должно быть не более 25 рядов idX ValueX на странице. И разбиение страницы (<span style="page-break-before: always"></span>) может быть только перед Sector / Subsector P.S. Искал на форуме, но ничего подходящего к моему случаю не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2007, 13:04 |
|
||
|
Помогите разбить выходной документ на страницы
|
|||
|---|---|---|---|
|
#18+
можешь выводить подсекторы друг за другом и вести счётчик выводимых значений, перед выводом очередного подсектора проверяй, не пора ли выводить разрыв страницы, ведение счётчика эмулируется рекурсией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2007, 15:56 |
|
||
|
Помогите разбить выходной документ на страницы
|
|||
|---|---|---|---|
|
#18+
В общем я понимаю как должен быть организован алгоритм, я не понимаю как именно применять рекурсию. Использую следующее XSLT преобразование: <xsl:template name="count" match="data"> <html> <head> <title>test template</title> </head> <body> <table border="0"> <tr id="*"><td colspan="2">************</td></tr> <xsl:for-each select="sector"> <xsl:sort select="substring-after(sector,'s')" data-type="number"/> <xsl:variable name="ThisSector" select="@id"/> <tr id="s"> <td colspan="2"> <xsl:value-of select="."/> </td> </tr> <tr id="**"><td colspan="2">************</td></tr> <xsl:for-each select="../subsector"> <xsl:sort select="substring-after(subsector,'u')" data-type="number"/> <xsl:variable name="ThisSubsector" select="@id"/> <tr id="ss"> <td colspan="2"> <xsl:value-of select="."/> </td> </tr> <tr id="+"><td colspan="2">+++++++++</td></tr> <tr id="0"><td>ID</td><td>Value</td></tr> <tr id="-"><td colspan="2">-------------------</td></tr> <xsl:for-each select="../item[@sector = $ThisSector and @subsector = $ThisSubsector]"> <tr id="data"><td><xsl:value-of select="@id"/></td> <td><xsl:value-of select="."/></td></tr> </xsl:for-each> <xsl:choose> <xsl:when test="(current()/@id = ../subsector[last()]/@id)"> <tr id="*"><td colspan="2">************</td></tr> </xsl:when> <xsl:otherwise> <tr id="-"><td colspan="2">-------------------</td></tr> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:for-each> </table> </body> </html> </xsl:template> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2007, 16:40 |
|
||
|
Помогите разбить выходной документ на страницы
|
|||
|---|---|---|---|
|
#18+
убрать форычи, обрабатывать подсекторы по одному – рекурсией вызывать обработку следующего подсектора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2007, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34971475&tid=1334072]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 385ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...