powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xsl-fo: цикл.
5 сообщений из 5, страница 1 из 1
xsl-fo: цикл.
    #39078795
Bidgo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача:
Во входящих данных есть n-буквенное слово. Например, <REG>ВЕЛИКОБРИТАНИЯ</REG>
Надо разбить его на буквы и вписать их в клетки таблицы.
Повторяющихся тегов не будет. То есть для каждого клиента формируется файл данных:
Страна (20 символов), Город (20), улица (30), дом (5), квартира (5), телефон (13), место работы (125) и .т.д.


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<fo:table>
  <fo:table-column column-number="1" column-width="0.5cm"/>
  ....
  <fo:table-column column-number="20" column-width="0.5cm"/>
  <fo:table-body>
    <fo:table-row>
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="substring(REG,1,1)/> 
        </fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="substring(REG,2,1)"/> 
        </fo:block>
      </fo:table-cell>
      ....
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="substring(REG,20,1)"/> 
        </fo:block>
      </fo:table-cell>
    </fo:table-row>
  </fo:table-body>
</fo:table>	


Таких полей около 20..
Можно как-то организовать цикл, чтобы в нем создавать ячейки таблицы со значением substring(REG,№,1)
Все поля перебрать и организовать для них цикл - не проблема.
Проблема, чтобы не описывать каждую ячейку...
...
Рейтинг: 0 / 0
xsl-fo: цикл.
    #39078809
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<xsl:template name="explode">
  <xsl:param name="str"/>
  <xsl:param name="idx" select="1"/>
  <xsl:if test="$param $gt;= string-length($str)">
    <fo:table-cell>
      <fo:block>
        <xsl:value-of select="substring($str, $idx, 1)"/> 
      </fo:block>
    </fo:table-cell>
    <xsl:call-template name="explode">
      <xsl:with-param name="str" select="$str"/>
      <xsl:with-param name="idx" select="$idx" + 1/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<fo:table>
  <fo:table-column column-number="1" column-width="0.5cm"/>
  ....
  <fo:table-column column-number="20" column-width="0.5cm"/>
  <fo:table-body>
    <fo:table-row>
      <xsl:call-template name="explode">
        <xsl:with-param name="str" select="REG"/>
      </xsl:call-template>
    </fo:table-row>
  </fo:table-body>
</fo:table>
...
Рейтинг: 0 / 0
xsl-fo: цикл.
    #39078836
Bidgo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чегой-то не работает..
В таком варианте не формирует файл вообще.
Заменил
Код: xml
1.
<xsl:if test="$param $gt;= string-length($str)">


на
Код: xml
1.
<xsl:if test="$idx >= string-length($str)">


и
Код: xml
1.
<xsl:with-param name="idx" select="$idx" + 1/>


на
Код: xml
1.
<xsl:with-param name="idx" select="$idx + 1"/>


Файл сформировало, но без ячеек.
...
Рейтинг: 0 / 0
xsl-fo: цикл.
    #39078844
Bidgo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще теперь изменил
Код: xml
1.
<xsl:if test="$idx >= string-length($str)">


на
Код: xml
1.
<xsl:if test="string-length($str) > $idx">



Все заработало.
Спасибо большое!
...
Рейтинг: 0 / 0
xsl-fo: цикл.
    #39078976
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BidgoВсе заработало.Изначально имелось в виду
Код: xml
1.
<xsl:if test="$param &lt;= string-length($str)">
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xsl-fo: цикл.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]