powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSL When...Otherwise... HTML tag
7 сообщений из 7, страница 1 из 1
XSL When...Otherwise... HTML tag
    #36782478
vitalycrash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Можно ли писать подобным образом:
<xsl:when test="local-name(.) = 'p'">
<fo:block xsl:use-attribute-sets="block-attributes" margin-bottom="15mm">
<xsl:for-each select="* | text()">
<xsl:call-template name="printText2"/>
</xsl:for-each>
</fo:block>
</xsl:when>

т.е. использовать ХТМЛ тэги....?

И если да.. то каким образом можно написать чтобы после определенного тэга выполнялось действие?

Например:
..(Когда) О! Тэг <pre>...
..(Делаем)После него увеличим margin-bottom на 10мм..
..(Иначе)ААА! Нету! Жаль.. ну и ладно..

Зараннее спасибо за помощь
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36782692
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitalycrash,

Код: plaintext
node()[name()='Tag_name']
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36782897
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Demin,
хитрый ответ :)

vitalycrash,

парсинг пишется очень просто, но не на циклах (главное чтобы ваш HTML удовлетворял стандарту xHTML)
вызываем:
Код: plaintext
<xsl:apply-templates select="*" mode="parse" />
обработка для всех:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xsl:template match="*" mode="parse" priority="-1">
   <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates mode="parse" />
   </xsl:copy>
</xsl:template>
<xsl:template match="text" mode="parse" priority="-1">
   <xsl:value-of select="." />
</xsl:template>
priority - чтобы не думать о том в каком месте будет это стоять, т.е. этот шаблон сработает только тогда, когда трансформер не найдет ни одного подходящего варианта.
mode - можно не использовать но с ней нагляднее, сразу понятно, что этот шаблон входит в группу парсинга, когда XSL написанно много - помогает.

кастомная обработка, например для тега P:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<xsl:template match="p|P" mode="parse">
   <xsl:copy>
       <xsl:copy-of select="@*[name() != 'CLASS' or name() != 'Class' or name() != 'class']">
       <xsl:attribute name="class">
           <xsl:text>my_class_for_p</xsl:text>
           <xsl:if test="@CLASS">
                <xsl:text> </xsl:text>
                <xsl:value-of select="@CLASS" />
           </xsl:if>
           <xsl:if test="@Class">
                <xsl:text> </xsl:text>
                <xsl:value-of select="@Class" />
           </xsl:if>
           <xsl:if test="@class">
                <xsl:text> </xsl:text>
                <xsl:value-of select="@class" />
           </xsl:if>
       </xsl:attribute>
       <xsl:apply-templates mode="parse" />
   </xsl:copy>
</xsl:template>

ну и так далее...

Все теги, которые нуждаются в обработке - выписываются в темплейты.
хорошо, если xHTML генерится программным образом, тогда можно не делать выкрутасы с регистрозависимостью.
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36782900
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
<xsl:template match="text()" mode="parse" priority="-1">
   <xsl:value-of select="." />
</xsl:template>

скобочки забыл :(
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36782914
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andry Trushin,

ну и справедливы каскады:
Код: plaintext
<xsl:template match="div[p[pre]]" mode="parse" />
т.е. такой шаблон позовется для элемента div, если в нем есть элемент p, в котором есть pre

надо быть аккуратно с такими штуками:
вариант 1:
Код: plaintext
1.
2.
<xsl:template match="div[p]" mode="parse" />
<xsl:template match="div[p[pre]]" mode="parse" />
вариант 2:
Код: plaintext
1.
2.
<xsl:template match="div[p[pre]]" mode="parse" />
<xsl:template match="div[p]" mode="parse" />
в первом случае всегда будет вызываться 1й шаблон, во втором случае - оба. Это свойство трансформера, он ищет шаблоны до первого совпадения условия.

Чтобы все было кошерно надо писать так:
Код: plaintext
1.
2.
<xsl:template match="div[p]" mode="parse" priority="1" />
<xsl:template match="div[p[pre]]" mode="parse" priority="2" />
т.е. чем больше вложений, тем больше приоритет.
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36782915
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andry Trushin,

ну и справедливы каскады:
Код: plaintext
<xsl:template match="div[p[pre]]" mode="parse" />
т.е. такой шаблон позовется для элемента div, если в нем есть элемент p, в котором есть pre

надо быть аккуратно с такими штуками:
вариант 1:
Код: plaintext
1.
2.
<xsl:template match="div[p]" mode="parse" />
<xsl:template match="div[p[pre]]" mode="parse" />
вариант 2:
Код: plaintext
1.
2.
<xsl:template match="div[p[pre]]" mode="parse" />
<xsl:template match="div[p]" mode="parse" />
в первом случае всегда будет вызываться 1й шаблон, во втором случае - оба. Это свойство трансформера, он ищет шаблоны до первого совпадения условия.

Чтобы все было кошерно надо писать так:
Код: plaintext
1.
2.
<xsl:template match="div[p]" mode="parse" priority="1" />
<xsl:template match="div[p[pre]]" mode="parse" priority="2" />
т.е. чем больше вложений, тем больше приоритет.
...
Рейтинг: 0 / 0
XSL When...Otherwise... HTML tag
    #36783425
vitalycrash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо,
Посмотрим - попробуем. Надеюсь поможет.
Спасибо за помощь
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSL When...Otherwise... HTML tag
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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