Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / fo:inline (fo:block) и динамическая подстановка аттрибутов / 6 сообщений из 6, страница 1 из 1
20.01.2016, 12:59
    #39151343
vladimir74
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
Доброго времени суток.

столкнулся с еще одной неудобной проблемой. Есть у нас в программе WYSIWYG Editor где пользователь может сам написать определеный блок текста. Этот блок должен так же отображаться на печати.
В базе он сохранятеься в виде HTML
Код: html
1.
2.
3.
4.
<span style="font-size:7pt; Color:red;font-weight=bold">Название фирмы</span>
<br>
<span style="font-size:7pt"> Адресс фирмы</span>
<span style="font-size:5pt"> дорогой и любимый Я</span>



Сами темплейты для этих двух тэгов описать просто:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    
<-- br  -->
<xsl:template match="br">
        <fo:block white-space="pre">
            <xsl:text disable-output-escaping="yes">&#10;</xsl:text>
        </fo:block>
    </xsl:template>
<--  span -->
    <xsl:template match="span">
                <fo:inline>
                    <xsl:apply-templates />
                </fo:inline>
    </xsl:template>


Подскажите как в темплейт для span подсунуть аттрибуты из style
...
Рейтинг: 0 / 0
20.01.2016, 13:45
    #39151418
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
а в чем проблема?
не знаете, как создать атрибут с помощью xsl:attribute?
не знаете атрибутов fo-inline ? не можете найти среди них соответствий css?
не знаете, как разбить строку с помощь substring-before/after?
...
Рейтинг: 0 / 0
20.01.2016, 14:09
    #39151458
vladimir74
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
Antonariy,

хмм, кажется в последнем строчке и заключается моя проблема!!
т.к. как создается xsl:attribute знаю, да и fo:inline по "бумажке" вроде подставлять могу, а вот как в него (fo:inline ) засунуть нужный аттрибут с параметром не могу сообразить
Единственное что приходит на ум xsl:choose с кучей xsl:when ну и тогда надо как то разбивать строку на substring-before/after. (с которыми у меня проблема )
...
Рейтинг: 0 / 0
20.01.2016, 14:39
    #39151500
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
vladimir74 Единственное что приходит на ум xsl:choose с кучей xsl:whenтак и есть.
только when нужно лишь для тех атрибутов, чьи названия не совпадают с css. для font-size, например, не нужно.

и походу не нужно в принципе, fo поддерживает css2 и его единицы измерения чуть менее чем полностью.

ну а разбитие строки и добавление атрибутов будет выглядеть примерно так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  <fo:inline>
    <xsl:call-template name="parse">
      <xsl:with-param name="str" select="@style"/>
    </xsl:call-template>
    <xsl:apply-templates />
  </fo:inline>
  
    <xsl:template name="parse">
      <xsl:param name="str"/>
      <xsl:variable name="style" select="substring-before($str,';')"/>
      <xsl:attribute name="{substring-before($style,':')}">
        <xsl:value-of select="substring-after($style,':')"/>
      </xsl:attribute>
      <xsl:call-template name="parse">
        <xsl:with-param name="str" select="substring-after($str,';')"/>
      </xsl:call-template>
    </xsl:template>
...
Рейтинг: 0 / 0
20.01.2016, 14:40
    #39151503
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
ну и плюс всякие проверки на длины строк, чтобы не было ошибки при добавлении безымянного атрибута.
...
Рейтинг: 0 / 0
20.01.2016, 16:35
    #39151635
vladimir74
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fo:inline (fo:block) и динамическая подстановка аттрибутов
Antonariy,

Спасибо!! отлично работает. Я только добавил в рекурсию
Код: xml
1.
<xsl:if test="string-length(substring-after($str,';'))&gt;0">
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / fo:inline (fo:block) и динамическая подстановка аттрибутов / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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